使 vimdiff 将不同的行显示为不同的行(不是部分不同)

使 vimdiff 将不同的行显示为不同的行(不是部分不同)

vimdiff 有一个恼人的习惯,即将两行几乎完全不同的行显示为同一部分不同的行,只是因为它们在开头或结尾共享一个共同的字符。

例如:

foo.txt包含:The quick brown fox jumps over the lazy dog. bar.txt包含:This is a completely different line.

vimdiff foo.txt bar.txt并排显示这两行,除了Th开头处突出显示之外的所有内容。

有没有办法禁用此行为并将不同的行显示为不同的行?

答案1

对的,这是可能的。输入命令

:hi! link DiffChange DiffText

答案2

不,这是 Vim 内部算法的一部分,用于进一步划分外部 diff 工具报告的行更改。

如果这可以通过一个选项来影响,那就太好了,但目前还没有。你必须修改 Vim 的源代码并编译你自己的特殊版本。编写一个补丁并将其提交给vim_dev 邮件列表?!

答案3

我认为这取决于“diff”命令的输出。

如果你运行“:help diff-options”,你可以看到 Vim 期望的 diff 格式的示例:

    1a2
    > bbb
    4d4
    < 111
    7c7
    < GGG
    ---
    > ggg

The "1a2" item appends the line "bbb".
The "4d4" item deletes the line "111".
The '7c7" item replaces the line "GGG" with "ggg".

对于替换(例如7c7),我认为vimdiff会将它们并排放置并为其着色为hl-DiffChange(例如在我的默认设置中为紫色),然后通过hl-DiffText突出显示该行中的不同文本(例如我的默认设置为红色)。

例如,如果我 vimdiff 这两个文件:

文件一:

This is common1
This is common2
11111111111111122222222222222222222222222222222222222
This is common4
This is common5

文件2:

This is common1
This is common2
This is a completely different line
This is common4
This is common5

尽管两个文件的第三行完全不同,但 vimdiff 仍然将它们并排放置。

一个黑客解决方案可能是使用修改外部 diff 程序来生成您想要的格式。

相关内容