En su (muy bueno) libro "Pratical Vim", Drew Neil muestra cómo recopilar todas las líneas que contienen la palabra "TODO" en un registro para usarlas posteriormente.
Para hacerlo, simplemente usa un comando global: :g/TODO/yank A
(La mayúscula A
permite pasar líneas al registro nombrado a
).
Creo que es un truco genial, pero necesito mejorarlo: estoy tratando de insertar el número de la línea antes de que sea contenido. Creo que la solución sería obtener el número de línea y usarlo en la última parte del comando que mencioné antes. El problema es que no sé cómo obtener este número de línea.
Entonces mi pregunta es: ¿cómo puedo obtener el número de la línea coincidente en un comando global y cómo puedo usar este número?
Solo para que quede claro aquí es un ejemplo. Consideremos este archivo:
1 //TODO: Hey this is a todo
2 int main(void){
3 //TODO: and this is another one
4 printf("Hello world");
5
6 return 0;
7 }
Cuando escribo :g/TODO/yank A
y pongo el contenido del registro en un archivo obtengo:
//TODO: Hey this is a todo
//TODO: and this is another one
Lo que me gustaría obtener es:
1 //TODO: Hey this is a todo
3 //TODO: and this is another one
Bonificación del tirón también incluyen el sangrado de la línea, sería muy bien si pudiera retirarlo directamente desde el comando global.
getpos()
ygetline()
. Además, a medida que respondió la pregunta adicional, se merece una galleta de baile ;)