问题描述
每次尝试在Windows 10(Vim 8.2)下的Vim中保存文件时,我都会尝试达到以下目的:
现在,通过将以下内容添加到我的autocmd
中,我可以使用.vimrc
来自动格式化文件:
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
问题在于文件内容没有在屏幕上更新(我仍然看到未格式化的文件)。我必须失去焦点,然后返回以查看重新加载文件的提示。 刷新文件缺少什么?
经过研究,到目前为止,我已经尝试了以下方法:
但它似乎不起作用。
注意:silent! !start /min
使在每次保存时(在Windows上)闪烁的烦人命令提示符静音。
以下在Windows上对我有用:
set autoread
autocmd BufWritePost * silent! !C:\Users\epoirier\Documents\BufWritePost.bat <afile>
autocmd BufWritePost * redraw!
我仍然看到控制台闪烁一秒钟(不到一秒钟),但是我可以忍受,因为Vim会自动重新加载文件,因此我可以继续工作。
解决方法
目前无法在Windows 10上对此进行测试,但是在Linux上,我正在尝试类似的设置,该设置可以正常工作:
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
autocmd BufWritePost * edit
autocmd BufWritePost * redraw!
文件重新加载是通过edit
(如您已经发现的)触发的,没有在!
前加
!
执行一个shell命令,但是edit
是一个vim命令,在该命令之前我们不需要!
(同样适用于redraw
)。
redraw!
是必需的,因为silent
can mess up the screen用于外部命令时。
另一种(我认为更适合)重新加载文件的解决方案是使用autoread
选项,而不是触发edit
。来自:help autoread
:
'autoread'
'ar'
当检测到文件在Vim外部已被更改并且在Vim内部尚未被更改时,请自动再次读取。
.vimrc
上的行变为:
set autoread
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
autocmd BufWritePost * redraw!