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

odw*_*dwl 122 git vim buffer

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

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

背景:我需要这个,因为我使用带有多个分支的git,其中一个vim open包含一个缓冲区.当我结帐分支时,我想要vim刷新.

Pau*_*ney 117

: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


pmf*_*pmf 85

阅读文档bufdo,它应该做你想要的.

  • 好的,所以,:bufdo e!会这样做的.但每次都有一个提示加载(Y/N).我怎么能摆脱它? (33认同)
  • `bufdo e`奇怪地让所有缓冲区都没有语法突出显示 (22认同)
  • 在使用`bufdo`命令之前使用`set noconfirm`(之后`set confirm`可以恢复). (21认同)
  • 为什么人们投票呢?它不仅不是答案,而且它引导您的方向意味着重新加载后语法突出显示被禁用. (12认同)
  • @StevenLu检查PaulFenney的答案如下. (4认同)
  • 运行`:syntax on`重新启用语法高亮 (2认同)

Iva*_*van 18

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

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

nmap <leader>gr call PullAndRefresh()
Run Code Online (Sandbox Code Playgroud)


phs*_*phs 7

来自:help autoread:

如果检测到文件已在Vim外部更改且Vim内部未更改,则会再次自动读取.文件被删除后,这没有完成.

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

然而,最后的细节是 vim注意到陈旧的缓冲区时.这可以强迫checktime.如果您设置了焦点事件,那么checktime只要我们获得焦点就可以运行:

set autoread
autocmd FocusGained * checktime
Run Code Online (Sandbox Code Playgroud)

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