7

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

我缺少的一个功能是,当我在另一个应用程序处理 gedit 上的任何文件时修改了任何文件时,会出现一个弹出窗口,上面写着The file <file_location> changed on disk. Do you want to reload the file?并且有两个分别命名为Reload和的按钮Cancel


我想要的是:

(请注意,我使用的是 vim,而不是 gvim)我想要 vim 中的类似功能。我希望如果磁盘上的任何文件发生更改,状态栏会出现警告消息:

File changed, press F9 to reload.

我会映射我F9的事情:e

4

2 回答 2

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

要仅打印警告,请设置autocmdFileChangedShell检测文件更改,提供重新加载文件):

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

对于插入模式,使用CursorHoldI(不确定这个 feedkeys 序列,但它似乎有效):

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

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

于 2012-08-23T12:53:56.203 回答
0

试图强迫 Vim 像另一个编辑器一样工作是没有意义的。我对此感到内疚(以 TextMate 为模型),这既是彻底的失败,也是学习曲线上的障碍。

但是,您所要求的 - 外部更改通知 - 是默认行为,可以使用:set autoread.

于 2012-08-23T12:29:53.030 回答