Dalam bukunya (sangat baik) bukunya "Pratical Vim" Drew Neil menunjukkan bagaimana mengumpulkan semua baris yang mengandung kata "TODO" ke dalam register untuk menggunakannya kemudian.
Untuk melakukannya dia cukup menggunakan perintah global: :g/TODO/yank A
(Modal A
memungkinkan terjadi baris ke register bernama a
).
Saya pikir itu trik yang sangat keren tapi saya harus memperbaikinya: Saya mencoba memasukkan jumlah baris sebelum kontennya. Saya pikir solusinya adalah dengan mendapatkan nomor baris dan menggunakannya di bagian terakhir dari perintah yang saya sebutkan sebelumnya. Masalahnya adalah saya tidak tahu cara mendapatkan nomor baris ini.
Jadi pertanyaan saya adalah: Bagaimana dalam perintah global saya bisa mendapatkan nomor dari baris yang cocok dan bagaimana saya bisa menggunakan nomor ini?
Untuk lebih jelasnya di sini adalah contoh. Mari pertimbangkan file ini:
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 }
Ketika saya mengetik :g/TODO/yank A
dan saya memasukkan konten register ke dalam file, saya mendapatkan:
//TODO: Hey this is a todo
//TODO: and this is another one
Yang ingin saya dapatkan adalah:
1 //TODO: Hey this is a todo
3 //TODO: and this is another one
Bonus yank juga termasuk lekukan garis, akan sangat keren jika saya bisa menghapusnya langsung dari perintah global.
sumber
getpos()
dangetline()
perintah. Juga saat Anda menjawab pertanyaan bonus, Anda layak mendapatkan kue menari ;):help function-list
. Ini referensi yang sangat berguna. Juga, +1 untuk penyebutan "Praktis Vim". :)a
register dalam mode normal adalah untuk merekam makro kosong denganqaq
mungkin itu kurang elegan daripada solusi Anda tetapi bekerja;) Juga solusi Anda dapat digunakan dalam vimscript sedangkan saya tidak berpikir itu mungkin dengan Milikku.