如何一次重新加载所有缓冲区?


20

在中的功能分支上工作时git,我经常需要存储更改以将错误修复提交到主分支。完成更改后,I git stash pop会更新文件上的时间戳。

即使文件相同,但下次尝试保存时,我得到:

警告:文件自读取以来已更改!!!

您真的要写(y / n)吗?

我不想每次在磁盘上更改文件时都自动重新加载文件,仅当I时git stash pop

现在,我分别手动重新加载每个缓冲区(:e)。我有什么办法可以在一个命令中做到这一点吗?

Answers:


26

查看:help bufdo您想做什么。它将在缓冲区列表中的每个缓冲区中执行一个命令。例如:

:bufdo e

您可能还想看看在:help noconfirm发出bufdo命令之前禁用确认对话框

:set noconfirm

并在bufdo命令后重新启用它。

:set confirm

1
要强制使用,请尝试::bufdo! e
kenorb 2015年

并且没有在屏幕上打印消息:静音!bufdo e
Werner

12

您可以使用:checktime命令执行此操作。从文档

:checkt[ime]        Check if any buffers were changed outside of Vim.
                    This checks and warns you if you would end up with two
                    versions of a file.

该命令将询问您如何对每个文件的时间戳已更改的缓冲区执行操作。要对未更改的文件禁用此功能,可以:set autoread强制vim重新加载它们。vim 询问您缓冲区和磁盘上文件之间的内容是否已更改。

您可以设置如下所示的地图以便于使用:

nnoremap <F5> :checktime<CR>

以下是一些奖励信息,它们实际上并不是答案的一部分:对我而言,在OpenSUSE上,gvim(vim的GTK GUI)在获得关注时自动执行此操作。我真的不知道为什么会这样做,也没有在其他系统上检查过,但我认为它可能会有用。也许可以确认吗?
tokoyami 2015年

这真的很有帮助!我最终所做的是将此命令集成为选项卡切换快捷方式的一部分。即nnoremap tl :tabnext<CR>:checktime<CR>
cr8ivecodesmith

1
@tokoyami,您拥有的功能gvim可能与中的FocusGained事件有关vim。您可以在此处找到一些相关信息-unix.stackexchange.com/a/383044/99801
维克多·亚雷玛
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.