2012-01-14 17 views

Odpowiedz

0

Dlaczego nie można filtrować pliki przed wywołaniem Vimdiff?

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

To nie pozwala na bezpośrednią edycję. Ogólnym celem jest edycja pliku 2 bezpośrednio na miejscu, z wyjątkiem zignorowanych linii. – ralfoide

6

W tym celu, można dodać następujące wpisy do .vimrc (prosty poglądach modyfikacji z przykładu znaleźć uruchamiając :h diffexpr wewnątrz 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 

Warto zauważyć, że Funkcjonalność udostępniana przez przełącznik -I() dla diff będzie TYLKO ignorować wszelkie zmienione linie, w których linia w obu plikach (lub wszystkich) pasuje do tego wyrażenia.

Więcej informacji na temat przełącznika --ignore-matching-lines=RE i :h diffexpr w vim zawiera więcej informacji na ten temat.

EDYCJA: Dodano opcjonalną zmienną g:diffignore w celu kontrolowania używanego wzoru. Zastosowano także function!, aby wymusić zastąpienie z definicji.

+0

Miałem nadzieję, że ktoś inny wpadł na ten pomysł. Dzięki za uratowanie mnie, potrzebuję włamać się do mojego .vimrc. Dzielę się tym czasem, więc dałem ci należny kredyt. ;-) –

+0

Dzięki za edycję @Greg – sanmiguel

+0

Aby pomóc nowicjuszowi względnej VIM, jak ustawić 'g: diffignore'? Jaki jest przedrostek 'g'? – drevicko

Powiązane problemy