Vim: ¿Cómo excluyo una palabra completa de mi búsqueda?

Una pregunta bastante básica, estoy tratando de escribir una expresión regular en Vim para que coincida con cualquier frase que empiece con "abc" seguido directamente de cualquier cosa que no sea "defg" .

He usado "[^ defg]" para unir cualquier caracter que no sea d, e, f o g.

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

0
¿te refieres a precedido? o seguido por? Sus ejemplos parecen implicar seguido por.
agregado el autor rampion, fuente

4 Respuestas

precedido o seguido por?

Si es algo que comienza con 'abc' que no es (inmediatamente) seguido de 'defg', quiere solución de bmdhacks .

Si es algo que comienza con 'abc' que no está (inmediatamente) precedido por 'defg', quiere un aspecto negativo detrás:

/\%(defg\)\@

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

Si desea hacer coincidir 'abc', siempre que no forme parte de 'defg. * Abc', simplemente agregue un . * :

/\%(defg.*\)\@

Hacer coincidir 'abc' solo en líneas donde 'defg' no ocurre es 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
agregado

Aquí vamos, este es un peludo:

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

(reemplace XXXXXX con la palabra de búsqueda). Esto buscará todo lo que no contenga XXXXXX. Imagino que si lo hiciste:

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

Esto puede funcionar como lo desees. ¡Espero que esto ayude un poco!

0
agregado

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

Es bastante engorroso para palabras más grandes, pero funciona como un encanto.

0
agregado
¿No será eso también incompatible con "abc daaa"?
agregado el autor Paul Tomblin, fuente

Aquí está la cadena de búsqueda.

/abc \(defg\)\@!

El concepto que está buscando se llama aserción negativa de anticipación. Prueba esto en vim para obtener más información:

:help \@!
0
agregado
+1 He tenido esta pregunta por un tiempo. Marcaría tu comentario como correo no deseado si no temiera que perjudicara a tu representante.
agregado el autor xdhmoore, fuente
Para el registro, soy un usuario de emacs :-)
agregado el autor bmdhacks, fuente