Як зіставити слово, що закінчується великою літерою та конкретною літерою?


9

У мене є слова, як lblSERINOdу реченнях. Слова розділені пробілом.

Я хочу замінити dв кінці всіх таких слів слова u. Так наприклад lblSERINOdбуде виглядати lblSERINOu.

Я спробував, s/.*\ud /u /gале Вім каже, що його не можна знайти .*\ud.

У чому тут проблема?

Відповіді:


10

Один із способів зробити це:

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

Спочатку я припускав , що новий механізм регулярних виразів Vim (рекламується як «швидше, але обмежені») не може зрозуміти , \uв :substitute, але це не так. Я швидше думаю, що зараз ОП забув використовувати %і просто шукав неправильну лінію; це пояснило б повідомлення про помилку, але, звичайно, все ж має бути підтверджене як "причина".


2
Ви впевнені в справі про "двигун"? Я не бачу, як це має значення.
Крістіан Брабандт

Ні, не впевнений зовсім ... Я зробив швидкий тест, який не працював, потім перечитав про patternфайл довідки, побачив, що новий двигун обмежений, ніж старий, припустив, що це причина .. мій перший тест був досить / можливо помилковим
VanLaser

5

Схоже, ви, можливо, змінили 'magic'параметр Vim зі свого типового на 'nomagic'. Ви можете перевірити це за допомогою команди

:verbose set magic?

Як задокументовано в : help / magic , 'nomagic'змушує .в regexp трактуватись як буквальну крапку замість метасимволу, що означає "відповідати будь-якому символу".

Я б настійно рекомендую залишити цю опцію в значення по замовчуванню. Це один з небагатьох варіантів, який насправді не повинен існувати і може спричинити тонкі проблеми в плагінах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.