【问题标题】:Is there a way to view two diffs in one vim tab?有没有办法在一个 vim 选项卡中查看两个差异?
【发布时间】:2012-07-05 07:18:58
【问题描述】:
我知道 vim 中的差异是页面本地的,这意味着我们只能在一个标签页中有一个差异,对吗?但是,如果我想在一个标签页中有两个差异怎么办。例如,一个差异在顶部两个窗口之间,另一个差异在底部两个窗口之间。这是处理 git merge 冲突的常见问题。
我们可以在顶部两个窗口中设置远程提交更改差异,在底部两个窗口中设置本地文件和本地冲突文件差异,然后,我们可以准确了解远程中的更改导致冲突并手动修复它们。
我该怎么做?有插件吗?
【问题讨论】:
标签:
vim
diff
git-merge
vimdiff
【解决方案1】:
缓冲区是否参与 diff 取决于标签页中所有可见缓冲区的'diff' 缓冲区设置(最多四个缓冲区)。实现你想要的需要一个“差异组”的概念,例如:setlocal diff=group1,但是今天不存在这样的东西。
在没有 Vim 补丁的情况下实现这一点的唯一方法(我能想到的)是在分屏屏幕或 tmux 会话中运行两个单独的 Vim 实例。
【解决方案2】:
如果你想比较 A.txt 和 B.txt 以及 A.java 和 B.java,你可以这样做:
echo two way diffs separator > separator
cat A.txt separator A.java > A
cat B.txt separator B.java > B
vimdiff A B
然后输入命令
G:sp|set noscrollbind|normal gg<enter> 拆分左窗格并解除新窗格的滚动,
<c-W>l 去右窗格,
G:sp|set noscrollbind|normal gg<enter> 对右窗格执行相同的操作。
当然,这并不理想:顶部窗口的光标没有链接,如果向下或向上滚动太多,每个缓冲区也包含另一个缓冲区。