Alternatif untuk menghindari tebasan dalam pencarian dan ganti untuk string panjang

10

Apakah ada alternatif dalam pencarian vim dan ganti untuk string, daripada harus melarikan diri setiap karakter khusus dalam string.

Misalnya, jika saya ingin mencocokkan string berikut dan ganti dengan sesuatu

[ERROR] Login unsucessful

Maka harus saya lakukan

:%s/\[ERROR\]\ Login\ unsucessful/something/g

Dan itu menjadi jauh lebih jelek dan menyakitkan untuk string kompleks yang mengandung banyak karakter khusus

Saya ingin melakukan sesuatu seperti

:%s/"[ERROR] Login unsucessful"/something/g

yang akan menghindari semua melarikan diri. Apakah ada fitur seperti ini?

MohitC
sumber

Jawaban:

16

Anda dapat menggunakan very-nomagicsakelar. Lihat :h \Vdetailnya. Ini akan memberimu %s/\V[ERROR] Login unsuccessful/something/g. Ada juga nomagicsaklar \M, yang merupakan versi yang lebih ringan \Vdan sepertinya tidak banyak digunakan.

Perhatikan juga bahwa Anda tidak harus keluar dari ruang seperti yang Anda lakukan dalam contoh, bahkan saat tidak digunakan \V.

PhilippFrank
sumber
Terima kasih. Tepat seperti yang saya inginkan. tidak mendapatkan ini di pencarian google saya, tidak tahu kenapa.
MohitC
2
@MohitC Saya memetakan /untuk /\vmengaktifkan "sangat ajaib" untuk sebagian besar pencarian, jadi saya telah memetakan //untuk /memulai pencarian yang tidak dimodifikasi (berguna untuk menelusuri riwayat pencarian mengabaikan pengubah) dan /v/untuk /\Vdengan cepat mematikan semua sihir untuk pencarian.
Kyle Strand
@MohitC Sebenarnya, pengaturan saya lebih rumit dari itu, karena saya juga menggunakan plugin untuk menggunakan "sangat ajaib" secara konsisten mungkin dalam semua konteks. Lihat jawaban saya di sini .
Kyle Strand
7

Anda tidak perlu keluar dari ruang. Jadi ini:

:%s/\[ERROR\]\ Login\ unsucessful/something/g

seharusnya benar-benar:

:%s/\[ERROR\] Login unsucessful/something/g

Dan, tentu saja, Anda dapat mengaktifkan "mode" yang sangat nomagis untuk membuat karakter khusus itu kurang istimewa:

:%s/\V[ERROR] Login unsucessful/something/g

Lihat :help /magic.

romainl
sumber
2

Selain bendera nomagik disebutkan dalam jawaban lain.

Seringkali Anda tidak perlu tepat dalam string pencarian Anda

Misalnya, untuk mencocokkan

[ERROR] Login unsucessful

Anda dapat menggunakan ekspresi

.ERROR. Login unsucessful

Jelas, Anda harus tahu bahwa data Anda tidak akan berisi string lain, berbeda dari target yang Anda maksudkan tetapi cocok dengan ekspresi.

RedGrittyBrick
sumber