我已经开始使用 vimdiff 并尝试为它设置颜色。 DiffAdd
和 DiffDelete
小组工作正常,但我想要 DiffChange
和 DiffText
分别为文件的旧版本和新版本使用不同的颜色。 (具体来说,旧文件为红色,新文件为绿色。例如,这就是 Visual Studio Code 的工作方式。
问题是高亮颜色在缓冲区之间共享。有没有解决的办法?我希望有一种方法可以编写一个函数来重新映射 DiffChange
的所有实例至 MyDiffChange
在一个 Pane 中,但我还没有找到一种方法来做到这一点。
即使是相当笨拙的解决方案也可以,因为它只需要适用于这个特定的用例。
最佳答案
高亮定义确实是全局范围的,并且大部分差异处理都是固定的和内置的。你是对的,Vim 不支持这一点。
作为一个黑客,您可以通过 matchadd()
覆盖突出显示具有更高的优先级。这些定义是窗口范围的,因此您可以根据文件所代表的内容定义不同的定义(我将使用缓冲区局部变量 b:version
,其值为 old
或 new
)。您需要检测 Vim 认为已更改的行,通过自己再次比较文件,或通过 diff_hlID()
.看看diffchar.vim plugin为了想法;该插件实现了类似的覆盖。
关于vimdiff:左右 Pane 的不同颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46020283/