2012-01-26 24 views
13

Estoy tratando de editar un archivo de configuración y quiero agregar una línea específica de código (en una línea nueva) cada vez que se combina una cadena específica ... todo lo que he buscado para buscar y reemplazar, estoy buscando buscar y anexar ...Buscar cadena y agregar línea en vi/vim

Respuesta

13

En vim\r es la nueva línea. Así que usted puede hacer algo como esto

%s/search string/&\rnew code/ 
+1

Para aclaración. Cuando se utiliza el sustituto, ¿el símbolo comercial lo agrega? ¿O contiene la línea que está reemplazando para que pueda anteponer "% s/string de búsqueda/\ rnewcode & /"? – VolatileStorm

+0

@Jaypal '% s /^.* cadena de búsqueda. * $/& \ Rnuevo código /' podría ser mejor? El tuyo puede romper la línea original. por ejemplo, si la línea es "search string = xyz" o "foosearch string = barsearch string" – Kent

+1

'\ r' es una nueva línea en una cadena sustituta. En un patrón de búsqueda '\ n' es una nueva línea. – Benoit

0

Esto es lo que haría:

:g/specific string/s/.*/&specific line of code 

g El comando obtiene todas las líneas que contienen specific string y luego aplicar el comando s sustituto a esas líneas. El comando s sustituye toda la línea con su contenido, más el specific line of code

HTH

13

personalmente, creo que el uso de ": g" comando es probablemente mejor que ": s" para este problema.

:g/key/norm owhat ever you want 

hará texto:

foo 
bar 
key 
foo2 
bar2 
key2 
blah 

a:

foo 
bar 
key 
what ever you want 
foo2 
bar2 
key2 
what ever you want 
blah 

si desea añadir la nueva línea encima de la línea que contiene el patrón, simplemente cambiar el pequeño "o" para "O"

+0

mejor que 'norma o' es' put = 'lo que quieras'' – Benoit

+0

@Benoit sí, ponlo o ponlo! – Kent

+0

Si tiene la opción 'autoindent' establecida,' norm o' y 'norm O' tienen la posible ventaja de que usarán la misma sangría que la línea que estaba buscando. – bdesham

Cuestiones relacionadas