有没有办法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!
这个命令发出后强制重绘。