有没有办法配置vimdiff忽略所有空格?

gri*_*yvp 63 vim diff vimdiff

我正在使用vim -d file1 file2它以查看它们之间的差异.这工作正常,但我想忽略空格更改 - 它们与源代码文件无关.

Vim帮助声明以下命令将起到魔力:

set diffopt+=iwhite
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,此命令仅添加-b到diff工具命令行,并且只忽略尾随空格.diff的正确命令行键应该是-w,忽略所有空格更改.但我找不到如何直接从Vim修改diff命令行.当然我可以编译自定义差异,或用diff.sh替换差异,但这看起来有点难看:(.

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

Ada*_*atz 37

这实现你想要的东西(取自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
Run Code Online (Sandbox Code Playgroud)

...我仍然在寻找一个更好的diffexpr帮助器来处理哪些线映射到哪个(GNU diff,即使用-w而不是-b,通过将额外的空格与诸如注释行之类的微小编辑相结合而感到困惑).也许是diffchar

  • 这应该是公认的答案,因为它是目前唯一正确的答案.这太糟糕了,vim没有一个简单的选项可以在"diff -b"和"diff -w"之间进行切换. (9认同)

ire*_*ses 28

是.iwhite像你一样设置选项,但另外,设置为diffexpr空.

vim文档的相关部分:

iwhite

忽略空白量的变化.如果'diffexpr'为空,则将"-b"标志添加到"diff"命令.检查"diff"命令的文档,了解它的确切功能.它应该忽略添加尾随空格,但不能忽略前导空格.

另请注意,您可以通过设置提供自定义diff命令行diffexpr.请参阅vimdiff手册页上的讨论,特别是:

可以将'diffexpr'选项设置为使用除标准"diff"程序之外的其他内容来比较两个文件并找出差异.

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

diff file1 file2 > outfile
Run Code Online (Sandbox Code Playgroud)

  • 这不会忽略所有空格(diff中的-w),但会实现忽略对空格的更改(-b在diff中). (8认同)

小智 18

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

set diffopt+=iwhite

set diffexpr=""
Run Code Online (Sandbox Code Playgroud)

它确实如此......这仍然是我所知道的最强大的差异工具,远胜于其他任何工具.

  • 不,这会在问题请求时实现diff -b,而不是diff -w.Adam K在这里有唯一正确的答案. (4认同)

小智 12

我知道这是一个古老的问题,但对于像我这样不知道的人来说,现在可以使用:

:set diffopt+=iwhiteall

如果“diffexpr”为空,则将“-w”标志添加到“diff”命令。

:h 'diffopt'