2013-04-05 18 views
6

hariç tüm kelimeleri silme Son bir hariç tüm satırları silmek için bir vim bulma/değiştirme konusunda sorun yaşıyorum, yani SQL'in birazında, üretmek güzel kod bir demet gelen tüm takma adlar listesivim: son

select 
column_a alias_a, 
column_b alias_b, 
column_c alias_c 

from 
... 

sadece

alias_a, alias_b, alias_c 

yüzden ben hemen sonrasında şu olmayan tüm kelimeleri silmek istiyor düşünüyorum listesine oluşturmak istiyorum bir virgül ve son satır

cevap

7

seçenek 1: sonra makro

qa$T d0jq 

kullanılarak :

%s/\v.*\s(\S+)$/\1/ 

seçenek 2 0 x harici komutuna bu makro

Seçenek 3

dönüş uygulamak istediğiniz kaç satır geçerli:

:%!awk '$0=$NF' 

seçenek 4: Eğer Hizala veya benzer eklenti varsa, Bu satırları sağa hizalayın, ardından c-v blokunu seçin ve kaldırın, son sütunu bırakın.

+0

Seçenek 1 yaptım teşekkürler. –

3

yapardım: yakalama grubuna 1'e son uzay kadar herşeyi kapmak için anlamı

:%s/\v(.*\s)(\w\+)/\2/ 

, daha sonra yakalama Grup 2'ye her şey ve sadece yakalama grubuna 2.

ile değiştirin bu değiştirir:

select 
column_a blah blah blah alias_a, 
column_b foo foo foo alias_b, 
column_c bar bar bar alias_c 

from 

için:

select 
alias_a, 
alias_b, 
alias_c 

from 

Daha sonrayumruk Takma adları bir virgülle ayrılmış bir satıra almak için birkaç kez.

+0

görüyorum "desen bulunamadı : \ v (. * \ s) (\ w \ +) –

+0

Hmm, tam olarak bunu vim içine yazdım ve benim için çalıştı, senin durumunda ne farklı olabileceğinden emin değilim. – Tim

4

Bu yapmalıyım:

:%s/.* \(.*\)\n/\1/
+0

Sonunda bu virgül de almaz mı? –

+0

@BrianRasmussen: Evet, OP'nin istediği gibi görünüyordu. –

+0

Ben böyle okumuş değilim, ama ne demek istediğini anlayabiliyorum. Lütfen yorumumu yok sayın. –

0

Görme hatları sonra aşağıdaki

:norm $bd0 
:*j 

Not yürütmek belirleyin: :norm fazla yardım için bkz :'<,'>

olarak görünecektir:

:h :norm 
:h :j