有没有办法configurationvimdiff忽略所有的空格?

我正在使用vim -d file1 file2来查看它们之间的差异。 这工作正常,但我想忽略空白更改 – 他们是无关的源代码文件。

Vim帮助指出,下面的命令将做到这一点:

 set diffopt+=iwhite 

但是不幸的是,这个命令只会添加-b diff工具命令行,而且只会忽略尾随的空格。 diff的正确命令行键应该是-w ,忽略所有的空格变化。 但是我找不到如何直接从Vim修改diff命令行。 当然,我可以编译自定义比较,或用diff.shreplace比较,但看起来有点丑陋:(。

有没有更好的方法来修改Vim如何与diff工具交互以显示文件差异?

是。 像你一样设置iwhite选项,但另外还要使diffexpr空。

从vim文档的相关部分:

iwhite

忽略空白量的变化。 如果“diffexpr”为空,则将“-b”标志添加到“diff”命令中。 检查“diff”命令的文档,以确定它的作用。 它应该忽略添加尾随空白,而不是引导空白。

还要注意,你可以通过设置diffexpr来提供一个自定义的diff命令行。 请参阅vimdiff手册页上的讨论,特别是:

“diffexpr”选项可以设置为使用标准的“diff”程序以外的其他内容来比较两个文件并找出差异。

当'diffexpr'为空时,Vim使用此命令来查找file1和file2之间的区别:

 diff file1 file2 > outfile 

这实现了你想要的(从diffexpr文档中取出, -b改为-w ):

 set diffopt+=iwhite set diffexpr=DiffW() function DiffW() let opt = "" if &diffopt =~ "icase" let opt = opt . "-i " endif if &diffopt =~ "iwhite" let opt = opt . "-w " " swapped vim's -b with -w endif silent execute "!diff -a --binary " . opt . \ v:fname_in . " " . v:fname_new . " > " . v:fname_out endfunction 

…我仍然在寻找一个更好的diffexpr帮手来处理哪些线映射到哪个( GNU diff ,甚至用-w而不是-b ,通过结合额外的空白和像注释行这样的小编辑而困惑)。 也许diffchar ?

谢谢你,这帮了我。 我现在只需要在我的〜/ .vimrc中有这个(比Adam K提出的更简单):

 set diffopt+=iwhite set diffexpr="" 

它是这样做的…这仍然是我所知道的最强大的差异工具,远远胜过其他任何工具。

解决Adam Katz解决scheme的评论中提出的一个问题:

根据vim的版本和用户的设置, silent命令可以忽略在发布后重画屏幕。 我也遇到过这个问题,这个问题在我使用:diffo之后执行:diffo 。 我的解决scheme是将无声执行命令更改为以下内容:

 silent execute "!diff -a --binary " . opt . \ v:fname_in . " " . v:fname_new . " > " . v:fname_out | redraw! 

这个命令发出后强制重绘。