在代码格式化程序保存 运行 后自动重新加载 vim 中的当前文件
Automatically reload current file in vim after code formatter has run on save
每次在 Vim 下 Windows 10 (Vim 8.2) 下保存文件时,我都试图实现以下目标:
- 自动格式化文件(使用外部工具,例如 Uncrustify)
- 重新加载Vim中的格式化文件(我想看新格式化的文件)
现在我可以使用 autocmd
自动格式化文件,方法是将以下内容添加到我的 .vimrc
:
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
问题是文件内容没有在屏幕上更新(我仍然看到未格式化的文件)。我必须离开焦点然后回来才能看到重新加载文件的提示。 刷新文件缺少什么?
经过一些研究,到目前为止我尝试了以下方法:
- 添加
autocmd BufWritePost * !edit
(手动,有效)
- 添加
autocmd BufWritePost * !redraw
但是好像不行。
注意: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'
When a file has been detected to have been changed outside of Vim and it has not been changed inside of Vim, automatically read it again.
.vimrc
上的行变为:
set autoread
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
autocmd BufWritePost * redraw!
每次在 Vim 下 Windows 10 (Vim 8.2) 下保存文件时,我都试图实现以下目标:
- 自动格式化文件(使用外部工具,例如 Uncrustify)
- 重新加载Vim中的格式化文件(我想看新格式化的文件)
现在我可以使用 autocmd
自动格式化文件,方法是将以下内容添加到我的 .vimrc
:
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
问题是文件内容没有在屏幕上更新(我仍然看到未格式化的文件)。我必须离开焦点然后回来才能看到重新加载文件的提示。 刷新文件缺少什么?
经过一些研究,到目前为止我尝试了以下方法:
- 添加
autocmd BufWritePost * !edit
(手动,有效) - 添加
autocmd BufWritePost * !redraw
但是好像不行。
注意: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'
When a file has been detected to have been changed outside of Vim and it has not been changed inside of Vim, automatically read it again.
.vimrc
上的行变为:
set autoread
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
autocmd BufWritePost * redraw!