彼の(非常に良い)本「Pratical Vim」で、Drew Neilは、「TODO」という単語を含むすべての行をレジスターに収集して、後者を使用する方法を示しています。
そのためには、単にグローバルコマンドを使用します:g/TODO/yank A
(大文字A
は名前付きレジスタへの行の発生を許可しますa
)。
私はそれはかなりクールなトリックだと思いますが、私はそれを改善する必要があります:それは内容の前に行の番号を挿入しようとしています。解決策は、行番号を取得して、前に述べたコマンドの最後の部分でそれを使用することだと思います。問題は、この行番号を取得する方法がわからないことです。
だから私の質問は、グローバルコマンドでどのようにして一致した行の番号を取得でき、この番号をどのように使用できるのですか?
ここで明確にするのは例です。このファイルを考えてみましょう:
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 }
入力:g/TODO/yank A
してレジスターの内容をファイルに入れると、次のようになります。
//TODO: Hey this is a todo
//TODO: and this is another one
私が入手したいのは:
1 //TODO: Hey this is a todo
3 //TODO: and this is another one
ボーナスヤンクにも行のインデントが含まれています。グローバルコマンドから直接削除できれば非常に便利です。
getpos()
とgetline()
コマンドを知りませんでした。また、ボーナスの質問に答えると、ダンシングクッキーに値します;)