【问题标题】:How do I deal with vim buffers when switching git branches?切换git分支时如何处理vim缓冲区?
【发布时间】:2015-12-03 15:45:38
【问题描述】:

所以,我在我的 vim 缓冲区中打开了大量文件,我正在使用 git 开发一个功能分支。突然,我意识到我需要回到我的主分支来快速修复。

提交后,我将 vim 会话保持打开状态并切换回 master 分支。但是,当我尝试从缓冲区加载我需要的文件时,我现在收到了消息

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

这对我来说是完整的。缓冲区中的文件来自我的功能分支,现在我已经切换回 master 分支,可以理解有一些增量需要处理。

我的问题是,在专业层面上如何处理这种情况?

考虑解决方案,我可以关闭所有缓冲区并重新打开文件。但是,我希望有一种“聪明”的方式来做到这一点。有没有办法用所需分支中的对应文件替换当前 vim 缓冲区中的文件?有没有办法维护多个缓冲区,每个 git 分支一个?

最终,我希望能够在 git 分支之间切换,并让打开的 vim 会话“知道”当前应该驻留在缓冲区中的文件版本。

部分原因是我仍在学习 vim 缓冲区的工作原理,并且刚刚开始广泛使用它们。所以如果我做了任何不成立的假设,请在适当的地方纠正我。

【问题讨论】:

    标签: git vim buffer version branch


    【解决方案1】:

    我会在你的~/.vimrc 中推荐你:set autoread

    当检测到文件在 Vim 之外被更改并且 它在 Vim 内部没有改变,自动重新读取。

    【讨论】:

    • 这可能更容易,但在编辑实时日志文件时有时会很麻烦。
    • @XavierT。由于此选项是全局本地选项,因此您始终可以使用 :setlocal noar 为缓冲区关闭它。
    【解决方案2】:

    您可以使用:bufdo e 强制 vim 从文件系统重新读取所有打开的缓冲区。

    bufdo 是一种将命令应用于多个缓冲区的方法。 (如果你使用标签,同样有一个tabdo

    所以它会用新分支的版本替换旧分支的版本。

    (类似的问答:Git branching while files are opened

    【讨论】:

    • 你完美地回答了我的问题。跟进问题。为什么这样做会将我的 vim 会话的文本更改为一种颜色?如果这不能立即唤起您对常见问题的记忆,请不要担心。这是一个小问题。
    • :bufdo 关闭事件处理,因此语法高亮未激活。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2010-10-14
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    相关资源
    最近更新 更多