Bagaimana mencocokkan kata yang diakhiri dengan huruf besar dan huruf tertentu?


9

Saya memiliki kata-kata seperti lblSERINOddalam kalimat. Kata-kata dipisahkan oleh ruang putih.

Saya ingin mengganti ddi akhir semua kata dengan u. Jadi misalnya lblSERINOdakan terlihat seperti lblSERINOu.

Saya sudah mencoba s/.*\ud /u /gtetapi Vim mengatakan tidak dapat menemukan .*\ud.

Apa masalah yang terjadi di sini?

Jawaban:


10

Salah satu cara untuk melakukannya adalah:

:%s/\u\zsd\>/u/g

Awalnya saya beranggapan bahwa mesin regex Vim baru (yang diiklankan sebagai "lebih cepat, tapi terbatas") tidak bisa mengerti \udalam :substitute, tapi ini tidak terjadi. Saya lebih suka berpikir bahwa OP lupa menggunakan %dan hanya mencari di jalur yang salah; ini akan menjelaskan pesan kesalahan, tetapi tentu saja masih perlu dikonfirmasi sebagai penyebab "the".


2
apakah Anda yakin tentang masalah mesin 'kembali'? Saya tidak melihat bagaimana ini membuat perbedaan.
Christian Brabandt

Tidak, tidak yakin sama sekali ... Saya melakukan tes cepat yang tidak berhasil, kemudian membaca kembali patterndi file bantuan, melihat disebutkan bahwa mesin baru lebih terbatas daripada yang lama, dengan asumsi itulah penyebabnya .. Tes pertama saya agak / mungkin cacat
VanLaser

5

Sepertinya Anda mungkin telah mengubah 'magic'opsi Vim dari standarnya menjadi 'nomagic'. Anda dapat memeriksa ini dengan perintah

:verbose set magic?

Seperti yang didokumentasikan di : help / magic , 'nomagic'menyebabkan .in regexp diperlakukan sebagai titik literal alih-alih metacharacter yang berarti "cocok dengan karakter apa pun".

Saya sangat merekomendasikan meninggalkan opsi ini pada nilai standarnya. Ini adalah salah satu dari beberapa opsi yang seharusnya tidak ada dan dapat menyebabkan masalah halus pada plugin.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.