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

时间:2012-01-14 11:27:23

标签: vim vimdiff

我有2个大文件来接受vimdiff。在vimdiff输出中,我想忽略显示差异但有特定单词的行。

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

谢谢,

3 个答案:

答案 0 :(得分: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提供的功能只会忽略任何已更改的行,其中两个(或所有)文件中的行与此表达式匹配

有关man diff切换和vim中--ignore-matching-lines=RE的更多详细信息,请参阅:h diffexpr,了解详情。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

很长一段时间以来,我一直在寻找解决方案,我发现EnhancedDiff plugin是最简单的解决方案,它使您的差异从一开始就更加聪明:)

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

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

  • Pathogen
    • git clone https://github.com/chrisbra/vim-diff-enhanced.git ~/.vim/bundle/vim-enhanced-diff
    • :Helptags(安装后仅需安装一次即可安装文档)
  • NeoBundle
    • NeoBundle 'chrisbra/vim-diff-enhanced'
  • Vundle
    • Plugin 'chrisbra/vim-diff-enhanced'
  • Vim-Plug
    • Plug 'chrisbra/vim-diff-enhanced'

2。像往常一样

例如使用vimdiffnvim -ddiffthis

3。设置过滤器

:EnhancedDiffIgnorePat ^WARNING:.*

4。重新差异

:diffupdate