首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在保存时运行代码格式化程序后,在vim中自动重新加载当前文件

在保存时运行代码格式化程序后,在vim中自动重新加载当前文件
EN

Stack Overflow用户
提问于 2020-10-16 19:22:26
回答 1查看 1.1K关注 0票数 1

每次在Windows 10 (Vim 8.2)下将文件保存到Vim中时,我都试图获得以下信息:

  1. 自动格式化文件(使用外部工具,例如,在中格式化文件(我希望看到新格式化的文件)

现在,我可以使用autocmd自动格式化文件,方法是在.vimrc中添加以下内容

代码语言:javascript
复制
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>

问题是没有在屏幕上更新文件内容(我仍然看到未格式化的文件)。我必须离开焦点,回来看一个提示,以重新加载文件。需要刷新文件的内容是什么?

经过一些研究后,我已经尝试了以下几点:

autocmd BufWritePost * !redraw

  1. Add autocmd BufWritePost * !edit (手动操作)
  2. Addautocmd BufWritePost * !edit

但这似乎行不通。

注意:silent! !start /min使恼人的命令提示符沉默,该命令提示符用于每次保存(在Windows上)闪现。

在Windows上,以下内容对我有用:

代码语言:javascript
复制
set autoread
autocmd BufWritePost * silent! !C:\Users\epoirier\Documents\BufWritePost.bat <afile>
autocmd BufWritePost * redraw!

我仍然看到控制台闪烁了(不到)一秒,但我可以接受,因为Vim重新加载文件自动,我可以继续工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-17 15:13:25

现在无法在Windows 10上测试这一点,但在Linux上,我正在尝试一个类似的设置:

代码语言:javascript
复制
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上的行变成:

代码语言:javascript
复制
set autoread
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
autocmd BufWritePost * redraw!
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64395191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档