vim - 当文件被另一个应用程序更改时如何得到通知?

标签 vim

在我听说 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 .

最佳答案

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

要仅打印警告,请设置 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 来自 echoechoe ,因为我不认为 echo在插入模式下打印。

关于vim - 当文件被另一个应用程序更改时如何得到通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091497/

相关文章:

vim - 如何在 PHP 文件中启用 HTML 片段?

java - Vim Syntastic Java 不知道当前的项目类

php - 有没有办法在 VIM 中添加基本的 PHP 错误下划线?

regex - VIM 中的字符串删除

vim - .vimrc中的条件颜色方案

java - 无法从 Java/Scala 控制台应用程序打开工作的 VIM 编辑器

shell - 如何在 vim 中运行 shell 命令并将结果字符串返回到 VimScript 变量中?

vim,使用 vanilla Vim 快速切换文件(无插件)

vim - 如何像在 Emacs 中那样在 Vim 中进行增量搜索?

vim - 在 Vim 状态栏中,右键盘数字