Vimdiff / Diff与排除的单词(但不是行)

时间:2014-08-05 09:23:45

标签: unix diff vim

我需要差异化(如果可能的话,使用vim作为差异前端)无数文件,所有这些文件在设计上至少有两个方面不同:

  • char * - > char const *
  • foo.m_data - > FOO

我不在乎。 diff允许使用-I排除整行,但可能是一行包含所需的差异,以及我需要纠正的其他差异,如下所示:

void foo ( char* bar, int alice )  
---
void foo ( char const* bar, float bob )

是否有人知道如何使用diff,最好以可以在vimscript或其他工具中表达的方式使用diff,这将找出int alicefloat bob之间的差异,但不是char*char const*

重申并举一个例子,我不想看到这个:

char* bar = foo( (char*)baz );
---
char const* bar = foo( (char const*)baz );

因为该行中唯一的变化是const,但我需要看到这个

char* bar, baz = 'A';
---
char const* bar, foo = 'A';

因为除了之外还有其他更改。

谢谢!

2 个答案:

答案 0 :(得分:1)

我已经在我刚刚发布的AdvancedDiffOptions plugin中实现了这样的功能。这可以通过sed过滤两个缓冲区,删除应该忽略的部分,然后将其提供给diff(通过自定义'diffexpr')。

例如,要忽略差异中char constchar的类型差异([ ]是在关键字前指定空格的技巧):

:DiffIPattern [ ]const
:DiffIPattern \.m_data

答案 1 :(得分:0)

你所要求的比常规差异更复杂。你需要一个语义差异。你可以结帐:

http://www.semanticdesigns.com/Products/SmartDifferencer/

http://www.semanticmerge.com/