从vim中的磁盘刷新缓冲区中的所有文件


123

从磁盘上的版本刷新文件的命令是 :e!

如何对缓冲区中的所有文件执行相同操作?

背景:我需要这样做,因为我正在将git与多个分支一起使用,并且打开了一个包含缓冲区的vim。当我结帐一个分支时,我想刷新一下vim。

Answers:


87

阅读的文档bufdo,它应该做您想要的。


33
好吧,:bufdo e!会做到的。但是每次都会提示加载(Y / N)。我该如何摆脱呢?
odwl

21
使用set noconfirm使用前bufdo命令(set confirm事后reanable)。
PMF

22
bufdo e奇怪的是,所有缓冲区都未突出显示语法
Steven Lu

4
@StevenLu在下面检查PaulFenney的答案。
DBedrenko 2014年

12
人们为什么要投票赞成?这不仅是一个答案,而且它的指导方向还意味着重新加载后语法高亮显示将被禁用。
德米特里·明科夫斯基,2015年

120

:checkt[ime]命令就是为此目的而设计的。

它将提示您重新加载所有已更改的缓冲区;如果您希望跳过该提示,则可以:set autoread事先进行操作(您仍会在具有本地未保存更改的缓冲区上得到提示)。

它还避免了Steven Lu在接受的答案上提到的语法突出显示问题;:bufdo通过设计关闭语法高亮显示

通过以下网址找到:http : //vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html


19

这是我最终输入.vimrc的内容:

fun! PullAndRefresh()
  set noconfirm
  !git pull
  bufdo e!
  set confirm
endfun

nmap <leader>gr call PullAndRefresh()

7

来自:help autoread

当检测到文件在Vim外部已被更改并且在Vim内部尚未被更改时,请自动重新读取。删除文件后,不会完成此操作。

如果像我一样,您只想始终被动地重新加载陈旧但未修改的缓冲区,那么似乎就可以完成工作。

然而最终的细节是,当 Vim注意陈旧的缓冲区。可以用强制checktime。如果您设置了焦点事件,那么checktime只要获得焦点,我们就可以运行,如下所示:

set autoread
autocmd FocusGained * checktime

这个答案也有一些有趣的细节。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.