我正在使用vim -d file1 file2
它以查看它们之间的差异.这工作正常,但我想忽略空格更改 - 它们与源代码文件无关.
Vim帮助声明以下命令将起到魔力:
set diffopt+=iwhite
但遗憾的是,此命令仅添加-b
到diff工具命令行,并且只忽略尾随空格.diff的正确命令行键应该是-w
,忽略所有空格更改.但我找不到如何直接从Vim修改diff命令行.当然我可以编译自定义差异,或用diff.sh替换差异,但这看起来有点难看:(.
有没有更好的方法来修改Vim如何与diff工具交互以显示文件差异?
这实现你想要的东西(取自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?
是.iwhite
像你一样设置选项,但另外,设置为diffexpr
空.
从vim文档的相关部分:
iwhite
忽略空白量的变化.如果'diffexpr'为空,则将"-b"标志添加到"diff"命令.检查"diff"命令的文档,了解它的确切功能.它应该忽略添加尾随空格,但不能忽略前导空格.
另请注意,您可以通过设置提供自定义diff命令行diffexpr
.请参阅vimdiff手册页上的讨论,特别是:
可以将'diffexpr'选项设置为使用除标准"diff"程序之外的其他内容来比较两个文件并找出差异.
当'diffexpr'为空时,Vim使用此命令查找file1和file2之间的差异:
diff file1 file2 > outfile
谢谢,这帮助了我.我现在只需要在〜/ .vimrc中拥有这个(比Adam K提出的更简单):
set diffopt+=iwhite set diffexpr=""
它确实如此......这仍然是我所知道的最强大的差异工具,远胜于其他任何工具.