kalıp içeren ancak ikinci kalıp içermeyen satırları arama


15

Bazı kelimesini içeren ama do hatları aramak gerek yok ikinci kelimesini içeren.

Örneğin, "Bu" kelimesini içeren ancak "kırmızı" kelimesini içermeyen satırları bulun

böylece bu satırları içeren bir dosya için

This is a blue coat
This is a red  coat
This is a purple coat
That is a coat

Arama yalnızca birinci ve üçüncü satırları bulur.

Herhangi bir tavsiye için teşekkürler!


Daha yeni Vims ile dağıtılan LogiPat eklentisini kullanabilirsiniz
Christian Brabandt

Yanıtlar:


23

Sen hatları içeren yazdırmak için bu komutu kullanabilirsiniz Thisdeğil red:

:g/\(.*This\)\&\(.*red\)\@!
  • \&dalları mantıksal olarak ayırır ANDçünkü iki koşulu (dalları) karşılayan çizgileri istiyoruz,
  • \(.*This\)ilk dal, sadece olabilir Thisama bu şekilde daha genel,
  • \(.*red\)\@!ikinci dal, \@!mantıksal olarak "önceki atom eşleşmezse sıfır genişlik eşleşmesi" anlamına gelir NOT.

Diğer bir deyişle:

\(.*This\)  \&  \(.*red\)\@!
°°°°°°°°°°  °°  °°°°°°°°°°°°
'This'      AND NOT 'red'

Çok teşekkürler, bu biçimlendirilmiş metin aracılığıyla bir sorguya çok benzer. Ben docstrings eksik fonksiyonları bulmak için bunu başardı.
Joshua Detwiler

1

Bu gönderiye bir göz atın.

@Romainl cevabı ile birleştirin ve istediğinizi yapabilirsiniz.

Örnek: Diyelim ki constbunlara sahip olmayan işlevlere bir eklemek istiyorum .

    handleChange = value => {

VIM betiği:

%s/\([ ]*\)\(\w* = .*$\)\&^\(\&\(.*const.*\)\@!.\)*$/\1const \2/gc

Çıktı:

    const handleChange = value => {

Açıklama:

\([ ]*\)\(\w* = .*$\)

- Bana sahip olan tüm satırları getir word =

\&

- kuralları birleştir

^\(\&\(.*const.*\)\@!.\)*$

- satır içermemelidir const.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.