Tengo algunas líneas de texto que siguen un patrón y otras que no. Me gustaría copiar las líneas que siguen este patrón y luego copiarlas / jalarlas en un registro para poder pegarlas como en cualquier otro lugar.
Ejemplo:
def function_1(param1,param2):
// do something1
// do something2
// do something3
return
def function_Nullify(param=None):
// does nothing
pass
Ahora básicamente me gustaría seleccionar las líneas que coincidan def.*$
, copiarlos y pegarlos.
por lo que la salida sería algo así:
def function_1(param1,param2):
def function_Nullify(param=None):
Quiero saber si es posible hacer esto en vim.
Algo así como copiar las líneas de expresiones regulares en el registro "m. Entonces podré hacer un" mp donde más necesito esto.
Entiendo que algo como sed, awk o grep con algunos operadores de redirección podría ser más adecuado para esta tarea, pero me gustaría saber si puedo usar vim para hacer esto.
Respuestas:
Puedes usar
"Myy
(mayúscula M) para adjuntar en el registro m. Esto le permite escribir un comando global para jalar todas las líneas que coincidendef.*$
y tirar todas las líneas en el registro m. Entonces todo lo que tienes que hacer es pegar el registro m para obtener los contenidos."mp
El comando global anterior le indica que busque todas las líneas que coincidan con el patrón
def.*$
y ejecuta el comando"Myy
en modo normalSin embargo, esto tiene un problema. ¿Qué sucede si el registro m no está vacío cuando se inicia? Bueno, terminarás con lo que hayas puesto en el registro la última vez más todas las cosas que adjuntas.
Para vaciar el registro, puede utilizar para establecer el registro en la cadena vacía.
Así que en vim escribirías
Tirar todo lo que coincida.
def.*$
en el registro m.fuente
:g/def.*$/y M
.\1
:def\ \([^(]*\).*$
. Como modificar el:g...
orden de tirar\1
en lugar de la partida completa?submatch()
La función parece que podría ayudarte en lo que estás tratando de hacer. Aunque no he podido usarlo correctamente todavía.y
después de una g ... comando. ¡Gracias!:g
mando. Lo que pides se puede hacer con una combinación de:global
y una macro, sin embargo.