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.
fuente
getpos()
ygetline()
. Además, a medida que respondió la pregunta adicional, se merece una galleta de baile ;):help function-list
. Es una referencia muy útil. Además, +1 por la mención de "Practical Vim". :)a
registro en modo normal es grabar una macro vacía conqaq
tal vez que sea menos elegante que su solución, pero funciona;) También su solución se puede usar en un vimscript, mientras que no creo que sea posible con mía.