2017-07-04 14 views
5

Mam następujący tekst:Regex w Vim- wstawienie pustego wiersza przed numerowane linie

Title line 
1. First list 
First line 
Second line 
2. Second list 
Oranges 
Mangoes 
3. Stationary 
Pen 
Pencils 
Etc 

chcę dodać pusty wiersz przed każdym ponumerowanych linii, tak że powyższy tekst wygląda jak następuje:

Title line 

1. First list 
First line 
Second line 

2. Second list 
Oranges 
Mangoes 

3. Stationary 
Pen 
Pencils 
Etc 

Próbowałem następujący kod, ale nie działa:

%s/^(\d)/\r\1/g 

i

%s/(^\d)/\r\1/g 

i

% s/^([0-9])/\r\1/gc

gdzie jest problem i jak można to rozwiązać. Dzięki za pomoc.

+1

ewakuacji nawiasach% S/^ (\ d)/\ r \ 1/G' => '% y/^ \ (\ d \)/\ r \ 1/g' – revo

+3

Inna metoda: '% g/^ \ d/norm O' – mattn

+0

Czy możesz wyjaśnić, jak działa? Można go dodać jako osobną odpowiedź. – rnso

Odpowiedz

4

Należy uciec nawiasy obrębie składni VIM w celu oznacza, że ​​specjalny klastra:

%s/^\(\d\)/\r\1/g 

Albo użyć koniec meczu zerowej szerokości twierdzenia (\ze) token:

%s/^\ze\d/\r 
3

Aby użyć grupy przechwytywania () bez konieczności ucieczki, użyj bardzo magicznej (\v) (Zobacz :h /magic)

:%s/\v^(\d)/\r\1/ 

Zauważ, że g flaga jest zbędny, ponieważ nie może być tylko jeden mecz na początku linii

jak cały dopasowany łańcuch jest potrzebna w sekcji zastępczej, można po prostu użyć & lub \0 bez konieczności grupę wyraźny przechwytywania

:%s/^\d/\r&/ 


Wymienione w comments

:g/^\d/norm O 

Komenda g umożliwia filtrowanie linii i wykonywanie poleceń w tych liniach, na przykład norm O, aby otworzyć nowy wiersz powyżej. Zakres domyślny jest cały plik, tak % nie jest potrzebna

Z polecenia zastępczego, to byłoby :g/^\d/s/^/\r/

Zobacz :h :g i :h ex-cmd-index za kompletną listę poleceń do korzystania z :g

1

Można użyć polecenia globalnego , :g, aby wykonać pusty :put w każdej linii przed odpowiadającym numerem, ^\d.

:g/^\d/pu!_ 

Uwaga: Korzystanie z rejestru czarnych dziur, "_, w połączeniu z :put dać nam pustą linię.

Dalsze pomocy patrz:

:h :g 
:h /\d 
:h :put 
:h quote_