วิธีจับคู่คำที่ลงท้ายด้วยตัวอักษรตัวพิมพ์ใหญ่และตัวอักษรที่ระบุได้อย่างไร


9

ฉันมีคำเหมือนlblSERINOdในประโยค คำจะถูกคั่นด้วยช่องว่างสีขาว

ฉันต้องการที่จะเข้ามาแทนที่ในตอนท้ายของคำดังกล่าวทั้งหมดที่มีd uดังนั้นสำหรับตัวอย่างเช่นจะมีลักษณะเช่นlblSERINOdlblSERINOu

ฉันลองแล้วs/.*\ud /u /gแต่พูดว่าไม่สามารถหา.*\udได้

ปัญหาคืออะไรที่นี่?

คำตอบ:


10

วิธีหนึ่งในการทำเช่นนี้ก็คือ:

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

ตอนแรกผมคิดว่าใหม่เป็นกลุ่มเครื่องยนต์ regex (ถูกโฆษณาว่าเป็น "เร็วขึ้น แต่ จำกัด") ไม่สามารถเข้าใจ\uใน:substituteแต่นี้เป็นกรณีที่ไม่ ฉันค่อนข้างคิดว่าตอนนี้ OP ลืมที่จะใช้%และเพียงแค่ค้นหาในบรรทัดที่ไม่ถูกต้อง; สิ่งนี้จะอธิบายข้อความแสดงข้อผิดพลาด แต่แน่นอนว่ายังต้องได้รับการยืนยันว่าเป็น "สาเหตุ"


2
คุณแน่ใจเกี่ยวกับสิ่งที่เครื่องยนต์กำลังทำอยู่หรือไม่? ฉันไม่เห็นว่าสิ่งนี้สร้างความแตกต่างได้อย่างไร
Christian Brabandt

ไม่ไม่แน่ใจเลย ... ฉันทำการทดสอบอย่างรวดเร็วที่ไม่ได้ผลจากนั้นอ่านใหม่เกี่ยวกับpatternในไฟล์ช่วยเหลือเห็นว่าเครื่องยนต์ใหม่มีข้อ จำกัด มากกว่าเดิมโดยสันนิษฐานว่าเป็นสาเหตุ .. การทดสอบครั้งแรกของฉันค่อนข้าง / อาจจะมีข้อบกพร่อง
VanLaser

5

ดูเหมือนว่าคุณอาจมีการเปลี่ยนแปลงที่เป็นกลุ่มของตัวเลือกจากเริ่มต้นของการ'magic' 'nomagic'คุณสามารถตรวจสอบสิ่งนี้ได้ด้วยคำสั่ง

:verbose set magic?

เป็นเอกสารที่: ช่วยเหลือ / มายากล , 'nomagic'ทำให้.ใน regexp ที่จะได้รับการปฏิบัติเป็นจุดตัวอักษรแทนความหมาย metacharacter "ที่ตรงกับตัวอักษรใด ๆ"

ฉันขอแนะนำอย่างยิ่งให้ออกจากตัวเลือกนี้ตามค่าเริ่มต้น นี่เป็นหนึ่งในตัวเลือกไม่กี่ตัวที่ไม่ควรมีอยู่จริงและอาจทำให้เกิดปัญหาเล็กน้อยในปลั๊กอิน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.