Dalam vim, saya kadang-kadang memiliki kesempatan untuk mengganti beberapa kejadian pertama pertandingan pada satu baris, tetapi tidak semua orang seperti g
itu. 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 berikutnyaa
dan ketiga yang berisia
dalam file (diminta untuk membalikkan jika perlu).:/a/,/\([^a]*a\)\{3\}/s/a/b/
: mengubah kemunculan pertama pada setiap baris antara ini dan berikutnya dengan 3a
detik 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 :s
perintah 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)
n
dan .
, 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 something
langsung dari kelelawar.
:[up][enter]
dapat diganti dengan &
, yang masih tidak ideal tetapi setidaknya kurang menyakitkan.