Substitusi global Vim tidak menggantikan semua kecocokan dalam satu baris

12

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 gatau gcparameter yang beroperasi pada seluruh file dengan %.

Pada file ini:

hello hello
hello
hello hello hello
hello

Jika saya melakukannya %s/hello/goodbye/gsaya dapatkan

goodbye hello
goodbye
goodbye hello hello
goodbye

Semua yang saya miliki .vimrctentang pencarian / penggantian saya adalah

set hlsearch
set ignorecase
set incsearch
Nicolas Scotto Di Perto
sumber
3
Tolong, beri kami contoh dunia nyata dan tunjukkan kami vimrc.
romainl
2
Apa hasil dari :echo &gddan apa yang terjadi jika Anda menambahkan gbendera ke-2 seperti ini: %s/hello/goodbye/ggatau jika Anda menghapus seluruh gbendera? Jika hasilnya :echo &gdadalah 1, coba tambahkan set nogdefaultdi akhir file Anda vimrc.
user9433424
1
Baik! Saya tidak tahu mengapa tetapi secara default itu diatur ke 0 jadi saya menambahkan set nogdefaultseperti yang Anda katakan dan itu bekerja sekarang, by the way. Terima kasih!
Nicolas Scotto Di Perto

Jawaban:

12

Mungkin Anda, atau plugin, telah mengaktifkan opsi 'gdefault'. Opsi ini menambahkan bendera gsecara otomatis setiap kali Anda melakukan substitusi.

Jadi, ketika Anda secara manual menambahkan flag gsaat 'gdefault'diaktifkan, seolah-olah Anda memiliki 2 gflag 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 gbendera (karena gdefaultsudah melakukannya), dan ketika Anda hanya ingin mengganti kemunculan pola yang pertama. pada sebuah garis, Anda menambahkan gbendera (karena 2 gbendera sama dengan tidak ada).

pengguna9433424
sumber