2012-01-26 24 views
13

Próbuję edytować plik konfiguracyjny i chcę dodać konkretną linię kodu (na linii nowej) za każdym razem, gdy dopasowywany jest określony ciąg ... wszystko, co przeszukałem ponieważ szuka i zamienia, szukam i dołączam ...Wyszukaj ciąg i dodaj linię w vi/vim

Odpowiedz

13

W vim\r to nowa linia. Więc można zrobić coś takiego

%s/search string/&\rnew code/ 
+1

W celu wyjaśnienia. Używając zamiennika, ampersand sprawia, że ​​jest on dołączany? Lub czy zawiera on linię, którą zastępujesz, abyś mógł kontynuować słowem "% s/string wyszukiwania/\ rnewcode & /"? – VolatileStorm

+0

@Jaypal '% s /^.* szukaj ciąg. * $/& \ Rnew kod /' może być lepiej? Twój może przerwać pierwotną linię. na przykład, jeśli linia to "search string = xyz" lub "foosearch string = barsearch string" – Kent

+1

'\ r' jest nową linią w łańcuchu zastępczym. We wzorcu wyszukiwania '\ n' jest nową linią. – Benoit

0

To jest to, co chciałbym zrobić:

:g/specific string/s/.*/&specific line of code 

Komenda g pobiera wszystkie wiersze zawierające specific string a następnie zastosować polecenie s zastępczej do tych linii. Komenda s zastępuje całą linię z jego zawartością plus specific line of code

HTH

13

Osobiście uważam, że za pomocą „G” polecenia jest chyba lepiej niż „: s” dla tego problemu.

:g/key/norm owhat ever you want 

uczyni tekst:

foo 
bar 
key 
foo2 
bar2 
key2 
blah 

do:

foo 
bar 
key 
what ever you want 
foo2 
bar2 
key2 
what ever you want 
blah 

jeśli chcesz dodać nowy wiersz powyżej linii zawierającej wzorzec, wystarczy zmienić małe "o" do "O".

+0

lepiej niż "norma o' to' put = 'co chcesz "' – Benoit

+0

@Benoit yep, put lub put! – Kent

+0

Jeśli masz ustawioną opcję "autoindent", "norma o" i "norma O" mają możliwą zaletę, że będą używać tego samego wcięcia, co linia, której szukasz. – bdesham

Powiązane problemy