2009-03-19 7 views
62

Estoy usando Vim, y quiero sustituir el texto de un marcador con una cadena larga, que abarca varias líneas, que ya está escrito en otro lugar en el archivo .Sustituir con contenidos de registro o líneas desde otro lugar en el archivo en Vim

¿Es posible reemplazar un patrón con el contenido de un registro? Algo como

:%s/foo/<contents of register A> 

De lo contrario, ¿es posible reemplazar con un rango de líneas? algo así como

:%s/foo/<content of lines from 10 to 15> 

Respuesta

78

Según http://vim.wikia.com/wiki/Search_and_replace Parece:

:%s/foo/\[email protected]/g 

También, presionando <c-r>a insertará el contenido del registro a.

Genial - Nunca lo supe. Buena pregunta.

Algunas otras cosas que hacer con <c-r>: http://vimdoc.sourceforge.net/htmldoc/cmdline.html#c_CTRL-R

+0

Estoy impresionado, que responden en menos de un minuto ... Gracias! –

+0

Siempre he querido poner cosas en los comandos que provienen del trabajo del portapapeles del sistema. – ojblass

+0

el enlace vimdoc está roto, utilice este: http://vimdoc.sourceforge.net/htmldoc/undo.html#CTRL-R – 0x89

20
:%s/foo/\=getline(10, 15)/g 

:%s/foo/\=join(getline(10, 15))/g 
+0

Creo que es lo opuesto a lo que está buscando ... Creo que quiere algo como: s/foo/10,15/ –

+0

Quizás no me expresé claramente, pero lo que quería lograr era reemplazar a 'foo' con ** los contenidos ** de las líneas del 10 al 15, y no limite el reemplazo a las líneas 10-15. Gracias por responder, de todos modos :) –

+1

He cambiado. ¿Esto encaja? –

Cuestiones relacionadas