Vim: Cum exclud un întreg cuvânt din căutarea mea?

Întrebare destul de fundamentală, Încerc să scriu un regex în Vim pentru a potrivi orice expresie care începe cu "abc" urmată direct de orice altceva decât "defg" .

Am folosit "[^ defg]" pentru a potrivi orice alt caracter decât d, e, f sau g.

My first instinct was to try /abc [^\(defg\)] or /abc [^\] but neither one of those works.

0
vrei să spui că ai precedat? sau urmată de? Exemplele dvs. par să sugereze urmate.
adăugat autor rampion, sursa

4 răspunsuri

precedat sau urmat de?

Dacă este ceva ce începe cu 'abc' care nu este (imediat) urmat de 'defg', vrei soluția bmdhacks" .

Dacă este ceva care începe cu 'abc', care nu este (imediat) precedat de 'defg', vrei un aspect negativ:

/\%(defg\)\@

This will match any occurance of 'abc ' as long as it's not part of 'defgabc '. See :help \@ for more details.

Dacă doriți să potriviți 'abc' atâta timp cât nu face parte din 'defg. * Abc', atunci trebuie doar să adăugați un . * :

/\%(defg.*\)\@

Se potrivește "abc" numai pe liniile în care nu apare "defg" este similară:

/\%(defg.*\)\@

Although, if you're just doing this for a substitution, you can make this easier by combining :v// and :s//

:%v/defg/s/abc //g

This will substitute '' for 'abc ' on all lines that don't contain 'defg'. See :help :v for more.

0
adăugat

Aici mergem, acesta este unul păros:

/\%(\%(.\{-}\)\@<=XXXXXX\zs\)*

(înlocuiți XXXXXX cu cuvântul de căutare). Aceasta va căuta tot ce nu conține și conține XXXXXX. Îmi imaginez dacă ați făcut-o:

/abc \%(\%(.\{-}\)\@<=defg\zs\)*

Acest lucru poate funcționa așa cum doriți. Sper că acest lucru ajută puțin!

0
adăugat

/ abc \ [^ d] [^ e] [^ f] [^ g]

Este destul de greoaie pentru cuvintele mai mari, dar funcționează ca un farmec.

0
adăugat
Nu se va potrivi, de asemenea, "abc daaa"?
adăugat autor Paul Tomblin, sursa

Iată șirul de căutare.

/abc \(defg\)\@!

Conceptul pe care îl căutați este numit afirmație negativă. Încercați acest lucru în vim pentru mai multe informații:

:help \@!
0
adăugat
+1 Am avut această întrebare o vreme. Mi-aș marca comentariul ca spam, dacă nu mi-ar fi frică să ți-o rănesc pe rep.
adăugat autor xdhmoore, sursa
Pentru înregistrare, sunt un utilizator emacs :-)
adăugat autor bmdhacks, sursa