我使用vim -d file1 file2
是为了查看它们之间的差异,这样做很好,但是我想忽略空格的变化--它们与源代码文件无关。
Vim help指出以下命令将发挥作用:
set diffopt+=iwhite
但不幸的是,这个命令只在diff工具命令行中添加了-b
,而且只忽略了尾随的空格。diff的正确命令行键应该是-w
,以忽略所有空格的更改。但是我找不到如何直接从Vim修改diff命令行。当然,我可以编译一个自定义的diff,或者用www.example.com替换diffdiff.sh,但这看起来有点难看:(。
有没有更好的方法来修改Vim与diff工具交互以显示文件差异的方式?
6条答案
按热度按时间jv2fixgn1#
这实现了您想要的内容(取自
diffexpr
文档,其中-b
更改为-w
):...我仍然在寻找一个更好的diffexpr helper来处理哪些行Map到哪些行(GNU diff,即使使用
-w
而不是-b
,也很难将额外的空格与注解行之类的小编辑结合起来)。6yjfywim2#
是的。按照您所做的那样设置
iwhite
选项,但是另外,将diffexpr
设为空。从vim文档的相关部分:
伊怀特
忽略白色数量的更改。如果“diffexpr”为空,则将“-B”标志添加到“diff”命令。请查看“diff”命令的文档以了解此命令的确切作用。它应忽略添加尾随空白,但不忽略添加前导空白。
还需要注意的是,你可以通过设置
diffexpr
来提供一个自定义的diff命令行,具体参见vimdiff man page的讨论:“diffexpr”选项可以设置为使用标准“diff”程序之外的其他程序来比较两个文件并查找差异。
当'diffexpr'为空时,Vim使用以下命令查找file 1和file 2之间的差异:
42fyovps3#
谢谢你,这对我有帮助。我现在只需要在我的~/.vimrc中有这个(比Adam K提出的更简单):
而且它做到了...这仍然是我所知道的最强大的比较工具,远远好于其他任何工具。
wko9yo5t4#
我知道这是一个古老的问题,但对于像我这样不知道的人来说,这是现在可用的:
:set diffopt+=iwhiteall
如果“diffexpr”为空,则将“-w”标志添加到“diff”命令。
参见
:h 'diffopt'
k5hmc34c5#
对于执行
set diffopt+=iwhite
时遇到“无效参数”的情况,请尝试不使用+
,如下所示:然而,一个更健壮的方法是在保留现有选项的同时设置ignore whitespace。不过要注意,“Invalid argument”错误很可能是由于不支持其中一个现有选项造成的。在我的例子中,它是“internal”选项,因此我需要按照以下顺序设置选项:
或者将以下内容添加到您的.vimrc:
贷记https://www.micahsmith.com/blog/2019/11/fixing-vim-invalid-argument-diffopt-iwhite/
djmepvbi6#
解决Adam Katz解决方案的注解中提出的问题:
根据vim版本和用户的设置,
silent
命令在发出后可能忽略重绘屏幕。我也遇到过这个问题,每当我在使用建议的diffexpr
后执行:diffo
时都会出现这个问题。我的解决方案是将silent execute命令更改为以下命令:这将强制在发出命令后进行重绘。