我知道 vim 中的差异是页面本地的,这意味着我们只能在一个标签页中有一个差异,对吗?但是,如果我想在一个标签页中有两个差异怎么办。例如,一个差异在顶部两个窗口之间,另一个差异在底部两个窗口之间。这是处理 git merge 冲突的常见问题。我们可以在顶部两个窗口中设置远程提交更改差异,在底部两个窗口中设置本地文件和本地冲突文件差异,然后,我们确切地知道远程中的更改导致冲突并手动修复它们。
我怎样才能做到这一点?有没有插件?
缓冲区是否参与 diff 取决于'diff'
选项卡页中所有可见缓冲区的缓冲区设置(最多四个缓冲区)。实现你想要的需要一个“差异组”的概念,例如:setlocal diff=group1
,但今天不存在这样的东西。
今天,在没有 Vim 补丁的情况下实现这一点的唯一方法(我能想到的)是在拆分窗口屏幕或 tmux 会话中运行两个单独的 Vim 实例。
如果要将 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>
对右窗格执行相同的操作。
当然,这并不理想:顶部窗口的光标没有链接,如果向下或向上滚动太多,每个缓冲区也包含另一个缓冲区。