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 程序来生成您想要的格式。