当我在不同的git分支之间切换时,如何处理vim缓冲区?

8

那么,我的vim缓冲区中有很多文件打开,并且我正在使用git的功能分支。突然间,我意识到需要回滚到主分支进行快速修复。

在提交完更改之后,我保持vim会话处于打开状态,并切换回主分支。但是,当我尝试从缓冲区加载所需的文件时,现在我收到以下消息:

Warning: File "<filename>" has changed since editing started

这对我来说非常清晰。缓冲区中的文件来自我的特性分支,现在我已经切换回主分支,理所当然会有一些差异需要处理。
我的问题是,在专业水平上如何处理这种情况?
考虑解决方案,我可以关闭所有缓冲区并重新打开文件。但是,我希望有一种“智能”的方法来解决这个问题。是否有一种方法可以将当前vim缓冲区中的文件替换为所需分支中的文件?是否有一种维护多个缓冲区(每个git分支一个)的方法?
最终,我想能够在git分支之间切换,并且打开的vim会话只需“知道”哪个版本的文件应该驻留在缓冲区中。
其中一部分是我仍在学习vim缓冲区的工作原理,并且刚开始广泛使用它们。因此,如果我做出了任何不正确的假设,请在适当的地方纠正我。
2个回答

11

我建议你在你的~/.vimrc中添加:set autoread:

当检测到文件在Vim外部发生更改并且没有在Vim内部更改时,自动重新读取该文件。


2
这可能更容易,但有时在编辑实时日志文件时会很麻烦。 - Xavier T.
3
@XavierT。由于此选项是全局-本地的,您可以始终使用“:setlocal noar”关闭缓冲区。 - Ingo Karkat

8
您可以使用:bufdo e命令,强制Vim从文件系统重新读取所有打开的缓冲区。 bufdo是将命令应用于多个缓冲区的一种方法。(如果您使用选项卡,则类似地有tabdo)
因此,它将使用新分支的版本替换旧分支的版本。
(类似问题和答案在这里:Git branching while files are opened)

你完美地回答了我的问题。跟进问题:为什么这样做会将我的vim会话文本更改为一种颜色?如果这不立即唤起您对常见问题的记忆,不用担心。这只是一个小问题。 - Zack
2
:bufdo 关闭事件处理,因此不会激活语法高亮。 - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接