2012-05-02 29 views

Odpowiedz

30

jest vim specyficzne wyrażenie regularne to zrobić

:%s/.*\n.*\n.*\n/\0\r/g 
  • % s jest vim ex polecenie substytut w całym pliku
  • . * \ n to linia obejmująca koniec wiersza
  • \ 0 to całe dopasowane wyrażenie
  • \ r vim sposób powiedzieć dodaj nową linię (nie \ n, jak można się spodziewać)

Edycja: jeśli chcesz cokolwiek innego niż nowa linia, po prostu umieść tekst przed \ r (poprawnie regex uciekł, jeśli zawiera jakieś znaki regex)

+5

vim również '\ {n \} 'który odpowiada' n' wystąpień wzoru. Na przykład użyłem tego, aby wstawić słowo "GO" na każdą setną linię (jako że wpisywanie '. * \ N' 100 razy staje się nużące):'% s/\ (. * \ N \) \ {100 \}/\ 0GO \ r/g'. Lub poprzez włączenie trybu bardzo magicznego ('\ v') w regex, staje się nieco prostszy do odczytania:'% s/\ v (. * \ N) {100}/\ 0GO \ r/' –

2

chciałbym to zrobić:

:%s/^/\=(line(".")%4==0?"\n":"")/g 

to działa, jeśli wymóg zmieniono na "* dodać nowy pusty wiersz każde 700 linii * s" :) wystarczy zmienić "4"

P.S. jeśli tego potrzebuję, nie zrobię tego w vimie. sed, awk, mógłby zrobić to znacznie prościej.

+0

Czy możesz wyjaśnić dla mnie, co oznacza każdy cmd? – Alisha

+0

'^' Reprezentuje początek linii. Otrzymujemy Mod numeru bieżącej linii przez 4, jeśli jest ona prawdziwa (równe zero), przyjmuje nową linię jako podstawienie, w przeciwnym razie nie używa niczego "". – SergioAraujo

12

Można użyć numeru macro. Cały proces wygląda następująco:

qq  " start recording to register q (you could use any register from a to z) 
o  " insert an empty line below cursor 
<Esc> " switch to normal mode 
jjj " move the cursor 3 lines downward 
q  " stop recording 

Następnie wystarczy przejść do linii startu i wpisz [email protected] wykonać makra 1000 razy.

+3

Ostateczne polecenie powinno wyglądać tak: 'qqoTo jest linia do dodania jjjq' i prawdopodobnie' 333 @ q' (1000/3 = 333) –

+0

@Sam Vim przestanie działać makro, jak tylko dotrze do końca pliku. –

+0

Jest to również przydatne, jeśli chcesz zrobić cokolwiek z * końcem * linii, zamiast wstawiać znak nowej linii przed czwartą linią lub podobną. – HitScan

5
" insert a blank line every 3 lines 

:%s/\v(.*\n){3}/&\r   

: .............. command 
% .............. all file 
s .............. replace 
/.............. start pattern that we will replace 
\v ............. very magic mode, see :h very-magic 
(.*\n) ......... everything including the line break 
{3} ............ quantifier 
/.............. start new pattern to replace 
& .............. corresponds to the pattern sought in (.*\n) 
\r ............. add line break 

źródło: http://www.rayninfo.co.uk/vimtips.html

Powiązane problemy