忽略vimdiff输出中包含特定单词的行

问题描述 投票:12回答:3

我有两个大文件采取vimdiff。在vimdiff输出中,我想忽略显示diff但有特定单词的行。

例如在我的情况下,我想忽略我的文件中前缀为WARNING:的所有行的差异。

谢谢,

vim vimdiff
3个回答
7
投票

为了实现这一点,您可以将以下内容添加到.vimrc中(通过在vim中运行:h diffexpr找到的示例中的简单修改):

set diffexpr=MyDiff()
function! MyDiff()
    let opt = ""
    if exists("g:diffignore") && g:diffignore != ""
        let opt = "-I " . g:diffignore . " "
    endif
    if &diffopt =~ "icase"
        let opt = opt . "-i "
    endif
    if &diffopt =~ "iwhite"
        let opt = opt . "-b "
    endif
    silent execute "!diff -a --binary " . opt . v:fname_in . " " .
        \ v:fname_new . " > " . v:fname_out
endfunction

值得注意的是,-I(或--ignore-matching-lines=)为diff开关提供的功能只会忽略任何更改的行,其中BOTH(或所有)文件中的行与此表达式匹配。

有关qzxswpoi开关和qaz中的man diff的详细信息,请参阅--ignore-matching-lines=RE以获取更多详细信息。

编辑:添加了可选变量:h diffexpr来控制使用的模式。还使用g:diffignore强制更换定义。


0
投票

为什么不在调用vimdiff之前过滤文件?

function!

0
投票

我已经找了很长时间的解决方案,我发现grep -v "^WARNING" file1 > file1_w; grep -v "^WARNING" file2 > file2_w; vimdiff file1_w file2_w 是最简单的解决方案,让你的差异开始时更加智能:)

1. Installation (EnhancedDiff plugin)

使用您选择的插件管理器:

2. Diff as usual

Plug 'chrisbra/vim-diff-enhanced'vimdiffnvim -d为例

3. Set the filter

diffthis

4. Re-diff

:EnhancedDiffIgnorePat ^WARNING:.*
© www.soinside.com 2019 - 2024. All rights reserved.