Dalam vim, saya kadang-kadang memiliki kesempatan untuk mengganti beberapa kejadian pertama pertandingan pada satu baris, tetapi tidak semua orang seperti gitu. misalnya:
a a a a a
untuk
b b b a a
Saya tahu saya bisa menggunakan :s/a/b/[enter]:[up][enter]:[up][enter], tapi itu cukup membosankan di tiga pengulangan, saya memiliki garis dengan berpotensi pengganti 10+.
Saya sudah mencoba:
:s/a/b/3g: vim mengeluh tentang karakter yang tertinggal.:s/a/b/3: mengubah kemunculan pertama pada ini dan dua baris berikut.3:s/a/b: sama seperti sebelumnya.:s/a/b/g3: mengubah semua kemunculan pada ini dan dua baris berikutnya.:3s/a/b: mengubah kejadian pertama pada baris 3.:/a/,3/a/s/a/b: mengubah kemunculan pertama pada setiap baris antara baris berikutnyaadan ketiga yang berisiadalam file (diminta untuk membalikkan jika perlu).:/a/,/\([^a]*a\)\{3\}/s/a/b/: mengubah kemunculan pertama pada setiap baris antara ini dan berikutnya dengan 3adetik di atasnya (dan ini tidak akan mudah diperluas ke pencarian multi-karakter).
Dan berbagai pola pengalamatan lainnya, tidak ada yang berhasil. Saya harus mengatakan, saya telah belajar cukup banyak tentang :sperintah yang mencoba menemukan jawaban untuk masalah ini, tetapi saya masih belum menyelesaikannya.
Adakah yang tahu bagaimana melakukan ini?
(poin bonus untuk rentang tertentu, misalnya kejadian kedua hingga keempat)
ndan ., meskipun saya tidak berpikir untuk menggunakannya di sini. Tentu saja perbaikan, terima kasih.
s/a/=something/harus melakukan trik ( :help sub-replace-=). Saya tidak cukup lancar dalam Vim untuk menulis somethinglangsung dari kelelawar.
:[up][enter]dapat diganti dengan &, yang masih tidak ideal tetapi setidaknya kurang menyakitkan.