Как сопоставить слово, заканчивающееся заглавной буквой и конкретной буквой?

9

У меня есть слова, как lblSERINOdв предложениях. Слова отделяются пробелом.

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

Я пытался, s/.*\ud /u /gно Вим говорит, что не может найти .*\ud.

В чем здесь проблема?

Утка
источник

Ответы:

10

Один из способов сделать это будет следующим:

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

Изначально я предполагал , что новый механизм регулярных выражений Vim (рекламируется как «быстрее, но ограничены») не может понять , \uв :substitute, но это не так. Теперь я скорее думаю, что ОП забыл использовать %и просто искал не в той строке; это объяснило бы сообщение об ошибке, но, конечно, все еще необходимо подтвердить как «причину».

VanLaser
источник
2
ты уверен насчет двигателя 're'? Я не понимаю, как это имеет значение.
Кристиан Брабандт
Нет, совсем не уверен ... Я сделал быстрый тест, который не сработал, затем перечитал patternв файле справки, увидел упомянутое, что новый движок более ограничен, чем старый, предположил, что причина ... мой первый тест был довольно / возможно ошибочным
VanLaser
5

Похоже, что вы, возможно, изменили 'magic'опцию Vim по умолчанию 'nomagic'. Вы можете проверить это с помощью команды

:verbose set magic?

Как описано в : help / magic , 'nomagic'вызывает .регулярное выражение в качестве регулярной точки вместо метасимвола, означающего «соответствовать любому символу».

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

jamessan
источник