13

我有 2 个大文件要使用 vimdiff。在 vimdiff 输出中,我想忽略显示 diff 但有特定单词的行。

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

谢谢,

4

3 回答 3

8

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

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(or --ignore-matching-lines=) 开关提供的功能diff只会忽略 BOTH (或所有) 文件中的行与此表达式匹配的任何更改的行。

请参阅man diff有关--ignore-matching-lines=RE开关的更多详细信息,并:h diffexpr在 vim 中了解有关此的更多详细信息。

编辑:添加了可选变量g:diffignore来控制要使用的模式。也用于function!强制替换定义。

于 2012-04-03T13:30:40.833 回答
2

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

grep -v "^WARNING" file1 > file1_w; 
grep -v "^WARNING" file2 > file2_w; 
vimdiff file1_w file2_w

如果您使用的是Bashzsh,则可以使用单个命令来完成:

vimdiff <(grep -v "^WARNING" file1) <(grep -v "^WARNING" file2)
于 2012-01-14T11:38:01.823 回答
1

我已经为此寻找解决方案很长时间了,我发现EnhancedDiff 插件是最简单的解决方案,它使您的差异开始时稍微更智能:)

1.安装(https://github.com/chrisbra/vim-diff-enhanced#installation

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

  • 病原
    • git clone https://github.com/chrisbra/vim-diff-enhanced.git ~/.vim/bundle/vim-enhanced-diff
    • :Helptags(安装后只需要安装一次文档)
  • NeoBundle
    • NeoBundle 'chrisbra/vim-diff-enhanced'
  • 文德尔
    • Plugin 'chrisbra/vim-diff-enhanced'
  • Vim 插件
    • Plug 'chrisbra/vim-diff-enhanced'

2. 像往常一样区分

使用vimdiff,nvim -ddiffthis例如

3.设置过滤器

:EnhancedDiffIgnorePat ^WARNING:.*

4.重新区分

:diffupdate
于 2019-03-01T12:42:03.090 回答