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?

Utku
sumber

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".

VanLaser
sumber
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.

jamessan
sumber