2017-07-04 37 views
5

ben şu var metni:Vim- Regex boş satır takmadan önce numaralandırılmış hatlar

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

Yukarıdaki metin aşağıdaki gibi görünecek biçimde ben, her numaralı satırdan önce boş bir satır eklemek istiyorum:

Title line 

1. First list 
First line 
Second line 

2. Second list 
Oranges 
Mangoes 

3. Stationary 
Pen 
Pencils 
Etc 

Ben kodu aşağıdaki denedim ama çalışmıyor:

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

ve

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

ve sorundur ve bu nasıl çözülebileceğini

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

. Yardım ettiğin için teşekkür ederim.

+1

kaçış parantez/\ r \ 1/g' => '% s/^ \ (\ d \)/\ r \ 1/g' – revo

+3

Başka bir yol: '% g/^ \ d/norm O' – mattn

+0

Nasıl çalıştığını açıklayabilir misiniz, ayrı bir yanıt olarak eklenebilir. – rnso

cevap

4

Ona bir özel küme anlamına amacıyla bir VIM sözdizimi içinde parantez kaçmak olmalıdır:

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

Veya maç sıfır genişlikli iddianın bir ucunu kullanmak (\ze) jetonu:

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

Onlardan kurtulmak zorunda kalmadan () yakalama grubunu kullanmak için \v çok sihir kullanın (Bkz. :h /magic)

01 Tüm eşleşti dize, tek basitçe açık yakalama grubu

gerek kalmadan & veya \0 kullanabilirsiniz yedek bölümünde de ihtiyaç olduğu hat

başında yalnızca bir eşleşme olabildiğince g bayrak gereksiz

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

Not olduğunu

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


comments

:g/^\d/norm O 
0 olarak Söz

g komutu, satırları filtrelemeye ve norm O gibi satırlarda komut satırını çalıştırmaya izin verir. Standart aralığı tüm dosya, bu nedenle %, bu :g/^\d/s/^/\r/

Sen küresel komutunu kullanabilirsiniz :g

1

ile kullanmak için komutları tam listesi için :h :g ve :h ex-cmd-index Bkz olacağını yerine komutla

gerekli değildir Eşleşme numarası ^\d'dan önce her satıra boş bir :put yürütmek için, .

:g/^\d/pu!_ 

Not: :put ile kombine kara deliğe kayıt, "_ kullanarak bize boş geçmesini sağlayacak.Daha fazla yardım için bkz

:% s/^ (\ d) 'de

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