有没有办法将vimdiff配置为忽略所有空白?

有没有办法将vimdiff配置为忽略所有空白?,vim,diff,vimdiff,Vim,Diff,Vimdiff,我使用vim-d file1 file2来查看它们之间的差异。这很好,但我想忽略空白更改-它们与源代码文件无关 Vim help表示以下命令将发挥作用: set diffopt+=iwhite 但不幸的是,这个命令只将-b添加到diff工具命令行,而这只会忽略后面的空格。diff的正确命令行键应为-w,以忽略所有空格更改。但是我找不到如何直接从Vim修改diff命令行。当然,我可以编译一个自定义的diff,或者用diff.sh替换diff,但这看起来有点难看:( 有没有更好的方法来修改Vim如

我使用
vim-d file1 file2
来查看它们之间的差异。这很好,但我想忽略空白更改-它们与源代码文件无关

Vim help表示以下命令将发挥作用:

set diffopt+=iwhite
但不幸的是,这个命令只将
-b
添加到diff工具命令行,而这只会忽略后面的空格。diff的正确命令行键应为
-w
,以忽略所有空格更改。但是我找不到如何直接从Vim修改diff命令行。当然,我可以编译一个自定义的diff,或者用diff.sh替换diff,但这看起来有点难看:(


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

是。如您所做,设置
iwhite
选项,但另外,将
differexpr
设为空

从本手册的相关章节:

伊瓦特

忽略空白量的更改。添加 如果出现以下情况,“diff”命令的“-b”标志 “DifferExpr”为空。请检查文档 “diff”命令的作用 没错。它应该忽略添加尾随 空白,但不是前导空白

还请注意,您可以通过设置
differxpr
来提供自定义的diff命令行。请参阅上的讨论,特别是:

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

当'differxpr'为空时,Vim使用此命令查找差异 在文件1和文件2之间:

diff file1 file2 > outfile

这实现了您想要的功能(取自将
-b
更改为
-w
):

set diffopt+=iwhite
设置diffexpr=DiffW()
函数DiffW()
让我们选择“”
if&diffopt=~“icase”
让opt=opt。“-i”
恩迪夫
如果&diffopt=~“iwhite”
让opt=opt.“-w”将vim的-b与-w交换
恩迪夫
静默执行“!diff-a--binary”.opt。
\v:fname_in.“.v:fname_new.>”.v:fname_out
端功能

…我仍然在寻找一个更好的DifferExpr助手来处理哪些行映射到哪个行(,即使使用
-w
而不是
-b
,也很难将额外的空白与注释行之类的小编辑结合起来)。也许?

谢谢,这对我有帮助。我现在只需要这个(比Adam K的建议更简单)在我的~/.vimrc中:

set diffopt+=iwhite

set diffexpr=""

而且它做到了……这仍然是我所知道的最强大的差异工具,比任何其他工具都要好。

解决亚当·卡茨解决方案评论中提出的问题:

根据vim版本和用户设置,
silent
命令发出后可以忽略重新绘制屏幕。我也遇到了这个问题,在使用建议的
diffexpr
后执行
:diffo
时就会出现。我的解决方案是将silent execute命令更改为以下内容:

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

这将在发出命令后强制重新绘制。

这不会忽略所有空格(-w in diff),而是实现忽略对空格的更改(-b in diff)。不,这将实现diff-b,而不是问题所要求的diff-w。Adam K在这里有唯一正确的答案。谢谢!只需“set diffopt+=iwhite”“已经很有用了,因为它是由vimdiff本身以交互方式发布的。这应该是公认的答案,因为它是目前唯一正确的答案。可惜vim没有一个简单的选项来在“diff-b”和“diff-w”之间切换,这两个选项几乎没有什么用处。不知怎的,我的
vim
(版本8,Debian Stretch)在
:diffupdate
之后闪烁并显示一个空白屏幕,只有在
分页
分页
之后才重新绘制正确的屏幕。非常奇怪…@DrBeco:这不是解决问题的正确地方,但我首先要看看gvim是否有问题(假设您有GUI)。如果没有,可以尝试使用不同的终端模拟器或不同的
$TERM
定义(例如“xterm-color”或“xterm-256color”,甚至只是“xterm”)。否则,我建议搜索web,如果没有帮助,搜索然后询问。对于解决方法,Ctrl+L可能会起作用。也许还可以尝试更改语法高亮显示。它在我的vimdiff中不起作用。结果就像只设置diffopt+=iwhite一样executed@ka3ak–确保您可以运行
diff-a--binary-i-wfILE1文件2
从命令行开始,它根据您的喜好处理空白。如果是这样,也许可以尝试使用该
diff
命令的绝对路径。如果您需要进一步的帮助,最好在上问一个关于它的详细问题。在此类网站上的评论,尤其是缺乏详细信息的评论,不会让您获得k你需要什么帮助,你需要问一个问题。