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

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


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

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


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

现在,我分别手动重新加载每个缓冲区(:e)。我有什么办法可以在一个命令中执行此操作吗?

#1 楼

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

:bufdo e


在发出:help noconfirm命令之前,您可能还希望查看bufdo以禁用确认对话框。

:set noconfirm


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

:set confirm


评论


要强制,请尝试::bufdo! e。

– Kenorb
15年4月18日在21:22

并且没有在屏幕上打印消息:静音!布夫多

–维尔纳
15年8月12日在20:26



#2 楼

您可以使用: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年2月5日在22:05

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

–cr8ivecodesmith
19 Mar 6 '19 at 11:39

@tokoyami,您在gvim中具有的功能可能与vim中的FocusGained事件有关。您可以在此处找到一些相关信息-unix.stackexchange.com/a/383044/99801。

– Victor Yarema
19年10月10日在15:24