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

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


和:

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


将它们显示在vimdiff给出:



我将要看到的是,在bc中,h没有大写。

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

评论

diffchar插件可能是您需要的,但是我对此零经验。也许有使用经验的人可以给出很好的详细答案(或替代方法)。

#1 楼

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

hl-DiffText   DiffText        Changed text inside a Changed line.  Vim
                                finds the first character that is different,
                                and the last character that is different
                                (searching from the end of the line).  The
                                text in between is highlighted.  This means
                                that parts in the middle that are still the
                                same are highlighted anyway.  Only "iwhite" of
                                'diffopt' is used here.



Tokoyami的建议使我们更近了一步。安装diffchar(适用于使用插件自动加载器的用户的Github链接)。从v4.7开始,在启用插件的情况下,Vim会自动显示更多确切的区别:
)在常用插件和插件之间切换。重新分配:

nmap <silent> <key> <Plug>ToggleDiffCharAllLines


用适当的键码替换<key>
let g:DiffColors=100




评论


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

– Sparhawk
16年7月8日在12:24

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

–muru
16年7月8日在13:00

我不确定我是否理解。这个示例中的常见元素(例如printf和ello)是否被忽略?

– Sparhawk
16年7月8日在22:10



@Sparhawk在此示例中,是的。但是随着更复杂的变化,它很快就会变得混乱。

–muru
16年7月9日在7:44

好的,那么那有点越野车...感谢您提供的信息。

– Sparhawk
16年7月9日在10:02