在vimdiff中将差异标记为OK

11
我有几个较大的JSON文件需要检查错误,想知道是否可能将差异标记为“ok”,并使其在整个差异会话中生效,从而在文件进一步处理时将其消除。
例子:
Name: Donald Duck    |   Name: Daisy Duck

我希望能够将此更改标记为“ok”差异(即我预期姓名和表面性别发生变化)。


2
很棒的问题!但可惜我怀疑这是不可能的。 - Prince Goulash
是的,我认为如果有的话,它会在帮助中的差异部分提到。我能想到的就是你可以黑进去,编写一个自定义的diff驱动程序,它读取一个包含要忽略的块的辅助临时文件,该文件通过vim中的“标记为ok”命令填充...但那是很多工作。 - Cascabel
嗯,它有点被提到了。但你必须要有创造性的思考。Vim对于大多数人来说太过灵活了 :) - sehe
2个回答

3
好的,要在vim中完成此操作,只需编写自定义差异表达式。例如,以下内容应当放入您的.vimrc文件中:
set diffexpr=MyDiff()
function! MyDiff()
    let opt = ""
    if &diffopt =~ "icase"
        let opt = opt . "-i "
    endif
    if &diffopt =~ "iwhite"
        let opt = opt . "-Ewb "
    endif
    silent execute "!diff -I 'Duck' " . opt . v:fname_in . " " . v:fname_new .
                \  " > " . v:fname_out
endfunction

当然,您希望使其更加灵活,但这应该可以给您一个通用的方法。

谢谢,虽然不是一个简单的解决方案,但它仍然是我能够使用的最好的方案。 - Sedrik
似乎你可以对一个问题有多个答案,但实际上并不行 =) (我还是 Stack Overflow 的新手) - Sedrik

1

我认为没有内置方法可以实现这一点。但我想到的方法是在文件上进行替换,然后重新 diff。

例如,如果名称更改可行,则只需在两个文件中进行替换:

%s/Name: Donald Duck/Name: placeholder_1/g    ; in file 1
%s/Name: Daisy Duck/Name: placeholder_1/g     ; in file 2

在启动vim -d之前,您也可以使用sed或perl来完成此操作。

现在这些将匹配。但是从唐老鸭到米奇老鼠的更改不会匹配,也不会从达菲鸭到黛西鸭。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接