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

San*_*mar 7 vim

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

而我正在上的gedit任何文件被其他应用程序,弹出使用来它说的一个特点,我缺少的是当任何文件被修改The file <file_location> changed on disk. Do you want to reload the file?并有两个名为按钮ReloadCancel分别.


我想要的是:

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

File changed, press F9 to reload.
Run Code Online (Sandbox Code Playgroud)

我会把我的地图映射F9:e.

eca*_*mur 6

如果autoread已设置,vim将检查文件是否在每个shell命令(:!)之后,写入文件以及何时发出时都已修改:checktime.当你将窗口焦点切换到应用程序时,gvim还会检查.

您可以:checktime使用http://vim.wikia.com/wiki/Timer_to_execute_commands_periodically上的配方定期执行:

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

只是打印警告,设置自动命令FileChangedShell(检测文件的变化,提供了重新加载文件):

autocmd FileChangedShell * echo "File changed, press F9 to reload."
Run Code Online (Sandbox Code Playgroud)

对于插入模式,使用CursorHoldI(不确定此feedkeys序列,但它似乎工作):

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

您可能必须将FileChangedShellautocmd 更改echoechoe,因为我不认为echo在插入模式下打印.