124

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

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

背景:我需要它,因为我正在使用带有多个分支的 git,其中一个打开的 vim 包含一个缓冲区。当我结帐一个分支时,我想刷新 vim。

4

5 回答 5

122

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

它将提示您重新加载任何已更改的缓冲区;如果您想跳过提示,您可以:set autoread提前做(您仍然会在带有本地未保存更改的缓冲区上收到提示)。

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

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

于 2014-01-24T11:41:37.947 回答
86

阅读文档bufdo,它应该做你想做的事。

于 2009-08-13T13:40:33.710 回答
19

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

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

nmap <leader>gr call PullAndRefresh()
于 2012-09-19T16:57:54.277 回答
7

来自:help autoread

当检测到文件已在 Vim 外部更改而在 Vim 内部未更改时,自动再次读取它。当文件被删除时,这并没有完成。

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

然而,最后的细节是vim注意到陈旧缓冲区的时间。这可以用checktime. 如果您设置了焦点事件,那么我们可以checktime在获得焦点时运行,如下所示:

set autoread
autocmd FocusGained * checktime

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

于 2016-12-07T08:18:39.853 回答
1

正如@Matthew S 在此处提到的https://vi.stackexchange.com/a/462,您可以使用:

:set noconfirm
:bufdo !e
:set confirm
于 2019-08-06T05:03:27.363 回答