2013-08-29 26 views
5

Katıldığım toplantıların kayıt defterini tutuyorum.Modelin bulunmadığı tüm paragraflar nasıl silinir?

Her bir toplantı:

  • boş bir çizgi ile ayrılır (-> Her bir toplantı bir paragraf)
  • bir ifade
  • sayesinde katlanmış olan, ilgili etiketlerin bir çizgi içerir: Acme, GMBH, SARL, vb ...

Ben mesela ben olduğum tüm toplantılar, gözden ACME yapmak istiyorum,

  • Bir çizik tamponu (:% y, bunu takiben: tabnew, ardından yapıştırma) oluşturuyorum ve ACME'nin göstermediği tüm paragrafları elimine etmek istiyorum.

Burada bir sorunum var.

Ben çizgilerle/silmek aramak için biliyorum:

:v/ACME/d 

Ama nasıl yapıyorsun ki (burada ACME rakamlar değil, etiketlerin sadece çizgi bütün paragrafı tutmak için çok gibi) paragraf? NB: desen ACME, bu paragraflarda bir kereden fazla rakam oluşturabilir.

cevap

6

Bu çalışır:

let @r="" | execute("g/acme/ normal \"Rdap") | %d | put r 

O "acme" içeren her paragrafa gider ve r kayıt ekleme bunu silin. Sonra her şeyi siler ve kayıt r koyar.

Gördüğünüz gibi, temel numara, içeriğini değiştirmek yerine, eklemek için büyük harfli yazmaç kullanıyor. Bu, aynı zamanda, önceki kayıt içeriğini atmak için kaydı başlangıçta sıfırlamayı gerektirir.

Bu, ilk paragrafın tamamından sonra tüm paragrafın silinmesiyle birlikte "acme" nin birden çok yinelemeli paragrafları için işe yarar ve bu nedenle, tekrar eşleşmez.

+0

Wow, 'execute' gerçekten şaşırttı parantez ile bir sözdizimi hatası vermez. Bunu daha önce hiç görmedim, normalde "execute" ... "yazıyor. – glts

+0

@glts burada aynı! ;) Hatta bir fonksiyon olup olmadığını görmek için ': h execute()' arandım .. yine de, bu iş +1 yapar!ve eğer başlangıçta '@ r 'değerini saklarsa ve sonunda geri yüklerseniz daha iyi olur. – Kent

+1

@glts Ben eko ("foobar") ve eko ("foo") denedim. '()' arasındaki ifade geçerli bir dize döndürdüğü (ya da str'ye dönüştürülebileceği) sürece işe yarayacaktır. '(ve)' okunabilirliği artırdı. :) – Kent

3

Ben yapabildin vim, Awk yapacağını:

%!awk -v RS="" -v ORS="\n\n" '/ACME/' 

sonra ACME içeren yalnızca paragraflar tutulacaktır.

+0

Cevabınız için teşekkürler, ancak Android cihazımda awk yok (yalnızca bilgisayarımda). Vim'de tek başına imkansız mıdır? – ThG

+0

@ThG iyi bir şekilde mümkün, ama birkaç tuş vuruşu işi olmayacak ... – Kent

+0

Denedim: v/'{ACME'}/d ... ve her şeyi sildim (hala neden anlamıyorum) . Tekrar teşekkürler. – ThG

İlgili konular