Vim: Añadir la pasta de amortiguar cada vez que se encuentra un texto determinado

StackOverflow https://stackoverflow.com/questions/2373150

  •  24-09-2019
  •  | 
  •  

Pregunta

En Vim Estoy intentando pegar unas pocas líneas:

PROC SQL;
   CONNECT TO DB2(DSN=test);
   CREATE TABLE test AS SELECT *
   FROM CONNECTION TO DB2 (

por encima de todas las líneas que comienzan con "seleccionar" y

);
quit;

debajo de cada línea que termina con "FOR FETCH ONLY"

¿Hay una manera de utilizar el búfer de pasta? Como

%s/^select/(a!)\rselect/

de modo que una vez que escriba el comando se abre un búfer de pegado como el a de comando, y los usos que a medida que el sustituto?

Gracias, Dan

¿Fue útil?

Solución

Si usted tiene el bloque PROC SQL en el registro A y el bloque quit; en el registro B, a continuación, sólo tiene que hacer lo siguiente.

:g/^select/put! a
:g/FOR FETCH ONLY$/put b

: g encuentra todas las líneas que concuerdan con el patrón dado y luego ejecuta el comando ex especificado en esas líneas. En este caso, desea utilizar : poner para pegar el contenido de la especificada registros .

Otros consejos

Para su problema de la inserción de texto de texto por encima o por debajo de la línea Me gustaría ir con la solución de jamessan de utilizar :g/.../put a. Sin embargo, para responder a su pregunta sobre el uso de un un registro como parte de la sustitución, puede utilizar una expresión para la sustitución comenzando con \ =. Por lo que también debe hacer lo que quiera, asumiendo el "PROC SQL; ..." texto está en un registro:

:%s/^select/\=@a."\n".submatch(0)/

en una expresión @a evalúa a los contenidos del registro de una, y subcoincidencia (0) es una función que se evalúa como la cadena coincidente por la expresión regular.

Tenga en cuenta que la sustitución completa se trata como una expresión, por lo que si desea incluir el texto normal Luego hay que citar que concatenar cadenas y con ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top