terkadang subtistusi global saya tidak menggantikan semua kecocokan dalam satu baris. Hal ini dikonfirmasi oleh fakta bahwa saya bisa melihatnya ketika saya melakukan pergantian dengan konfirmasi, kecocokan ditemukan dalam garis dengan beberapa kemungkinan kecocokan, tetapi kemudian beralih ke baris lain.
Saya menggunakan g
atau gc
parameter yang beroperasi pada seluruh file dengan %
.
Pada file ini:
hello hello
hello
hello hello hello
hello
Jika saya melakukannya %s/hello/goodbye/g
saya dapatkan
goodbye hello
goodbye
goodbye hello hello
goodbye
Semua yang saya miliki .vimrc
tentang pencarian / penggantian saya adalah
set hlsearch
set ignorecase
set incsearch
substitute
Nicolas Scotto Di Perto
sumber
sumber
vimrc
.:echo &gd
dan apa yang terjadi jika Anda menambahkang
bendera ke-2 seperti ini:%s/hello/goodbye/gg
atau jika Anda menghapus seluruhg
bendera? Jika hasilnya:echo &gd
adalah1
, coba tambahkanset nogdefault
di akhir file Andavimrc
.set nogdefault
seperti yang Anda katakan dan itu bekerja sekarang, by the way. Terima kasih!Jawaban:
Mungkin Anda, atau plugin, telah mengaktifkan opsi
'gdefault'
. Opsi ini menambahkan benderag
secara otomatis setiap kali Anda melakukan substitusi.Jadi, ketika Anda secara manual menambahkan flag
g
saat'gdefault'
diaktifkan, seolah-olah Anda memiliki 2g
flag yang memiliki efek yang sama dengan tidak ada. Oleh karena itu, Vim hanya menggantikan kemunculan pola pertama di setiap baris.Secara default, opsi ini dinonaktifkan, tetapi untuk memastikan itu, Anda bisa menambahkan pada akhir Anda
vimrc
:set nogdefault
.Atau, jika Anda menduga plugin mungkin telah mengaktifkan opsi, Anda dapat melacaknya dengan:
verb set gd?
Atau Anda bisa terbiasa dengan opsi yang berarti bahwa ketika Anda ingin mengganti semua kemunculan pola, Anda tidak menambahkan
g
bendera (karenagdefault
sudah melakukannya), dan ketika Anda hanya ingin mengganti kemunculan pola yang pertama. pada sebuah garis, Anda menambahkang
bendera (karena 2g
bendera sama dengan tidak ada).sumber