Игнорировать строки с определенными словами в выводе vimdiff

У меня есть 2 больших файла для vimdiff. В выводе vimdiff я хочу игнорировать строки, показывающие diff, но имеющие особое слово.

например. в моем случае я хочу игнорировать diff всех строк с префиксом WARNING: в моих файлах.

Спасибо,

Ответ 1

Чтобы достичь этого, вы можете добавить следующее в свой .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 (или --ignore-matching-lines=) для diff, будет ТОЛЬКО игнорировать любые измененные строки, где строка в BOTH (или всех) файлах соответствует этому выражению.

Более подробную информацию об этом можно найти в man diff для более подробной информации о переключателе --ignore-matching-lines=RE и :h diffexpr в vim.

EDIT: добавлена ​​необязательная переменная g:diffignore для управления тем, какой шаблон использовать. Также используется function! для принудительной замены на определение.

Ответ 2

Почему вы не фильтруете файлы перед вызовом vimdiff?

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