在我听说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
。
答案 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 FileChangedShell
(Detect 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
撤消。