Vim ~/.vimrc au!FileChangedShell

Vim ~/.vimrc au!FileChangedShell

我把这个命令放在~/.vimrc中。

au! FileChangedShell img.dat | r img.dat

其中还包含

set autochdir           " pwd is always directory of current buffer  

我希望确保,如果文件 img.dat 存在于 pwd 中,并且它被 vim 以外的某个应用程序修改,那么 vim 会将新的 img.dat 读入当前缓冲区。但事实并非如此,什么也没有发生。

v:fcs_reason is unset  
:if exists("#FileChangedShell") | echo 'yes' | else | echo 'no' | endif

返回“是”

我错过了什么?

答案1

您可能想要:edit命令而不是:read命令。但是:edit如果您在 Vim 中有未保存的更改,则命令将失败,因此您必须使用 强制执行它!。另外,我不知道为什么在|命令前面有一个,因为它不属于那里。

尝试这个:

au! FileChangedShell img.dat e!

编辑: 请注意,FileChangedShell 不会在每次与 Vim 缓冲区关联的磁盘文件发生更改时立即触发。Vim 会在特定时间检查更改的文件。来自:help FileChangedShell

大多在执行 shell 命令后触发,但也可能在使用:checktime命令或 Gvim 重新获得输入焦点时触发。

我相信当您要求 Vim 写入文件时也会发生这种情况。

相关内容