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

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

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

背景: 我之所以需要它,是因为我在多个分支上使用 git,其中一个 vim 是打开的,它包含一个缓冲区。当我签出一个分支时,我希望有 vim 刷新。

25764 次浏览

阅读 bufdo的文档,它应该可以满足您的需要。

下面是我最后放在我的.vimrc 中的内容:

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


nmap <leader>gr call PullAndRefresh()

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

It will prompt you to reload any buffers that have changed; if you wish to skip the prompt, you can do :set autoread beforehand (you'll still get a prompt on buffers with local unsaved changes).

这也避免了陆在公认答案 abc1中提到的语法突显问题。

发现: http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html

来自 :help autoread:

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. When the file has been deleted this is not done.

如果,像我一样,你只是想 always passively重新加载陈旧但未修改的缓冲区,那么这似乎应该得到这项工作完成。

然而,最后的细节是 什么时候 vim 注意到陈旧的缓冲区。这可以通过 checktime强制执行。如果你有 聚焦活动设置,那么我们可以运行 checktime每当我们获得焦点像这样:

set autoread
autocmd FocusGained * checktime

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

正如@Matthew S 在这里提到的, 你可使用:

:set noconfirm
:bufdo !e
:set confirm