2008-09-25 37 views
7

¿Hay alguna manera de buscar múltiples cadenas simultáneamente en Vim? Recuerdo haber leído en alguna parte que era posible, pero de alguna manera olvidé la técnica.Búsqueda avanzada en Vim

Así que, por ejemplo, tengo un archivo de texto y quiero buscar "foo" y "barra" simultáneamente (no necesariamente como una sola cadena, puede estar en diferentes líneas en total).

¿Cómo lo consigo?

Respuesta

15
/^joe.*fred.*bill/   : find joe AND fred AND Bill (Joe at start of line) 
/fred\|joe     : Search for FRED OR JOE 
+0

Esto también funciona. Y es mucho más simple que la respuesta parantética que di debajo de –

+0

Si solo encontré esto antes ... :( – ojblass

-3
/(foo|bar) 
+1

por defecto tiene que escapar bares y paréntesis:/\\ (foo \ | bar \\) pero de cualquier manera, en este caso no es necesario agruparlos!/foo \ | bar – wilhelmtell

0

Vim admite expresiones regulares comenzando en el modo de comando con un '/'.

Así que usar algo como "/ (foo \ | bar)" (como se dijo anteriormente) resolvería el problema. Es bueno saber por qué funciona y qué estás usando (expresiones regulares).

2

En realidad he encontrado la respuesta poco después de que he publicado esto (sí lo hice Google antes, pero era incapaz de localizarlo. Probablemente sólo estaba buscando mal)

La solución correcta es

/(foo \ | bar)

@ Pablo Betts: El tubo tiene que ser escapado

+0

Creo que es necesario escapar de la tubería en algunos dialectos RegExp y no en otros –

+0

se requiere en vi – jop

+0

Sí .. . Acepto que es necesario en vi, pero el escape de caracteres es terriblemente inconsistente e intentar copiar directamente ese fragmento en otra implementación debe realizarse con cuidado. –

Cuestiones relacionadas