VIM

2010-06-23 9 views
19

'daki eşleşen olmayan ilk satırı bulun Bazen, Windows'ta çeşitli oturum açma ve izleme dosyalarına bakmam gerekiyor ve genellikle VIM için kullanıyorum. Bir çizgi tampon değil eşleştirme verilen normal ifadede bulmak: gerçiVIM

Sorunum hala VIM'in içindeki herhangi analog grep -v ait bulamıyorum olmasıdır. Örneğin. günlük dosyası, bir yerde bir yerde all is ok ifade içeren satırlarla doldurulur ve all is ok içermeyen ilk satırı bulmam gerekiyor.

Bunun için özel bir işlev yazabilirim, ancak bu bir aşırı sıkışıklık gibi görünüyor ve yerel çözümden daha yavaş gibi görünüyor.

VIM'de bunu yapmanın kolay bir yolu var mı?

:%g!/search/p 

Bu ... bu çalıştı emin değilim, ama birlikte eşleşmeyen satırları düştün yazdırmak için diyor ki:

cevap

13

negatif görünüm arkada operatörü @<!

mesela kullanabilirsiniz (tabii ki, "arama" için başka bir dize yerine) /\v^.+(^.*a.*$)@<!$

kullanın "a" içeren tüm satırları değil bulmak için (\v sadece neden ( ve @<! gibi bazı operatörler olmuştur ters eğik çizgi kaçmış olmalılar değil) daha basit yöntemi tüm hatlar eşleşen veya eşleşmeyen silmektir

desen (:g/PATTERN/d veya sırasıyla :g!/PATTERN/d)

+0

'/^.\+\(^.*all tamam. * $ \) \ @ Dummy00001

+0

': g!/PATTERN/p' çok fazla çıktı üretir. bir seçenek olmayan birkaç milyon satırlık dosya için. ama ': g!/PATTERN/d 'çok kullanışlı görünüyor örn. stdin'den okunan tampon ile çalışmak için, henüz bir dosyaya kaydedilmemiş. ! Olmadan - g/DESEN/d': – Dummy00001

+0

Uhm ... açıkçası ': Benim durumumda için g/DESEN/d'' olarak yazılmalıdır (ilginç çizgiler macthing pıtır görmezden)! - ilgisiz çizgileri kaldırmak için. – Dummy00001

2

Ben sadece "g" komutunu kullanarak biraz klutzy prosedürü başardı imleç, eşleşen olmayan ilk satıra yerleştirildi.

+2

Ve ': V'' eş anlamlıdır: g 'elbette. – Cascabel

+0

@Jefromi: Bunun için teşekkürler: 'v' hakkında unuttum. –

5

ben "temiz" günlükleri dosyalarına yüzden kullanmak, senin durumunda genellikle değilim:

:g/all is ok/d 

Sizin grep -vdeğilhatası içermiyor tüm satırları kaldırır

:v/error/d 

ile elde edilebilir.

19

Yalnızca imlecinizin eşleşen olmayan ilk satırda olmasını istiyorsanız, genel komutunuzdaki komutu görsel olarak kullanabilirsiniz. Yani:

:v/pattern/visual 

ilk eşleşmeyen çizgisinde imleci bırakacaktır. Veya imlecinizi ilk eşleşen satıra bırakacaktır.

+1

görsel komut da vi'ya kısaltılabilir ... böylece yapabilirsiniz: v/pattern/vi –

+0

Bu açıkça en iyi cevaptır. Neden seçilmedi? – histumness

+3

Dosyanın başlangıcından itibaren ilk eşleşme olmayan satırı bulur, ancak geçerli imleç konumundan başlamıyor. İmleç konumundan arama yapmak için ':., $ V/pattern/vi' kullanın. –

3

Muhtemelen çok geç oldu ama bence bu bir yerlerde söylenmeli.

Vim (sürümü yaklaşık 7'den beri.4) LogiPat adı verilen bir eklenti ile gelir, bu da bazı dizeleri içermeyen satırları aramayı kolaylaştırır.

:LogiPat !"all is ok" 

Ve sonra eşleştirme arasında atlamak (veya bu durumda uymayan cinsinden) n ve N ile hatlar olabilir: Yani all is ok içeren böyle yapılır değil satırları bulma Bu eklenti kullanarak.

:LP !("foo"|"bar")&"baz" 

LPLogiPat için kısaltmadır ve bu komut sözcüğü baz ve don' ihtiva hatları arayacaktır:

Ayrıca, bir desende farklı dizeleri katılmak & ve | gibi mantıksal işlemleri kullanabilirsiniz Ne foo ne de bar'u içermez.