我把这个命令放在~/.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 写入文件时也会发生这种情况。