Em seu (muito bom) livro "Pratical Vim", Drew Neil mostra como coletar todas as linhas que contêm a palavra "TODO" em um registro para usá-las posteriormente.
Para fazer isso, ele simplesmente usa um comando global: :g/TODO/yank A
(A capital A
permite que ocorram linhas no registro nomeado a
).
Eu acho que é um truque bem legal, mas preciso melhorá-lo: estou tentando inserir o número da linha antes do conteúdo. Acho que a solução seria obter o número da linha e usá-lo na última parte do comando que mencionei antes. O problema é que não sei como obter esse número de linha.
Portanto, minha pergunta é: como em um comando global posso obter o número da linha correspondente e como posso usar esse número?
Só para ficar claro, aqui está um exemplo. Vamos considerar este arquivo:
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 }
Quando digito :g/TODO/yank A
e coloco o conteúdo do registro em um arquivo, recebo:
//TODO: Hey this is a todo
//TODO: and this is another one
O que eu gostaria de obter é:
1 //TODO: Hey this is a todo
3 //TODO: and this is another one
Bonus o puxão também incluem o recuo da linha, seria muito legal se eu poderia removê-lo diretamente a partir do comando global.
fonte
getpos()
egetline()
. Além disso, ao responder à pergunta do bônus, você merece um biscoito de dança ;):help function-list
. É uma referência muito útil. Além disso, +1 pela menção de "Practical Vim". :)a
registro no modo normal: gravar uma macro vazia comqaq
talvez seja menos elegante que sua solução, mas funciona;) Também sua solução pode ser usada em um vimscript, embora eu não ache possível meu.