行内更详细的比较


17

vimdiff经常检查文件之间的差异,有时它会漏掉一点。例如,如果我有以下两个文件:

//a.c
printf("Hello\n");

和:

//b.c
int i = printf("hello\n") + 3;

显示他们vimdiff给:

在此处输入图片说明

我将要看到的是,在BC中,h大写字母不大写。

有没有办法告诉vimdiff比较(在那一行中)它的一部分(我的意思是,忽略the int i =和the + 3)?


4
diffchar插件可能是你所需要的,但我与它零距离体验。也许有使用经验的人可以给出很好的详细答案(或替代方法)。
tokoyami 2015年

Answers:


15

我认为Vim本身无法做到这一点。来自:h view-diffs(强调我的):

hl-DiffText DiffText已更改的行内的已更改文本。  Vim
                                找到第一个不同的字符,
                                和最后一个不同的字符
                                (从行尾开始搜索)。  的
                                中间的文本突出显示。  这表示
                                中间的那部分仍然是
                                仍然突出显示相同的内容。  仅“ iwhite”的
                                这里使用'diffopt'。

Tokoyami的建议使我们更近了一步。安装diffchar(对于使用插件自动加载器的用户,请使用Github链接)。从v4.7开始,在启用插件的情况下,Vim自动显示出更多确切的区别:

在此处输入图片说明

  • 您可以按F7(默认键盘映射)在常用插件和插件之间切换。重新分配:

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    替换<key>为适当的键码。

  • 您可以使用更多颜色:

    let g:DiffColors=100
    

+1但“更近一步”对我来说似乎过于保守。Diffchar 完全解决了IMO的这个问题。
Sparhawk

@Sparhawk好吧,它不会忽略一行中的公共元素(OP只希望突出显示更改)
大师

我不确定我是否理解。在此示例中,公共要素(例如printfello)是否被忽略?
Sparhawk

1
@Sparhawk在这个例子中,是的。但是随着更复杂的更改,它很快就会变得混乱。
大师

好的,那么那有点越野车……感谢您提供的信息。
Sparhawk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.