如何在其他应用程序更改文件时收到通知?

时间:2012-08-23 12:22:10

标签: vim

在我听说vim之前,我曾经使用过gedit。我仍然试图使vim的行为与gedit相同,这是因为我在StackOverflow上提出了许多与vim相关的问题。

我缺少的一个功能是当我在另一个应用程序处理gedit上的任何文件时修改了任何文件,弹出用来表示The file <file_location> changed on disk. Do you want to reload the file?并且有两个按钮名为 Reload < / kbd>和分别取消


我想要的是什么:

(请注意我使用的是vim,而不是gvim)我想在vim中使用类似的功能。我想要在磁盘上更改任何文件,状态栏会显示一条警告消息:

File changed, press F9 to reload.

我会将 F9 映射到:e

2 个答案:

答案 0 :(得分:6)

如果设置了autoread,vim会在每个shell命令(:!)之后,写入文件以及发出:checktime时检查文件是否已被修改。另外gvim会在您将窗口焦点切换到应用程序时进行检查。

您可以使用http://vim.wikia.com/wiki/Timer_to_execute_commands_periodically处的食谱定期执行:checktime

autocmd CursorHold * call Timer()
function! Timer()
    call feedkeys("f\e")
    checktime
endfunction
set updatetime=5000  " milliseconds

要仅打印警告,请设置autocmd FileChangedShellDetect file change, offer to reload file):

autocmd FileChangedShell * echo "File changed, press F9 to reload."

对于插入模式,请使用CursorHoldI(不确定此Feedkeys序列,但似乎有效):

autocmd CursorHoldI * call TimerI()
function! TimerI()
    call feedkeys("\<C-R>\e")
    checktime
endfunction

您可能需要将FileChangedShell autocmd从echo更改为echoe,因为我认为echo不会在插入模式下打印。

答案 1 :(得分:0)

试图强迫Vim像其他编辑一样工作是一个毫无意义的练习。我对此感到内疚(以TextMate为模型),它既是完全失败又是学习曲线的障碍。

但是,您所询问的内容 - 外部更改通知 - 是默认行为,可以使用:set autoread撤消。