Vim эквивалентный `preg_quote ()` и `quotemeta` - PullRequest
1 голос
/ 17 августа 2011

В vimscript я могу regexp-сопоставить вещи с matchstr() и matchlist()

Но что, если мне нужно добавить к шаблону предоставленную пользователем строку ?
Как я могу процитировать метасимволы в этом?

1 Ответ

2 голосов
/ 17 августа 2011

Я не думаю, что есть что-то, что делает это, но вы можете использовать модификатор волшебства, который может быть достаточно хорошим.Допустим, у вас есть следующее выражение:

let pattern = '\<'.word.'\>'

, если word - строка, предоставленная пользователем, то (если я правильно понимаю) вы хотели бы игнорировать все специальные модификаторы в ней.Для этого используйте «очень кочевой режим».Помещая "\ V" перед шаблоном, вы заставляете шаблон вести себя почти как буквальная строка.Затем введите «\ m» для восстановления нормального поведения.В этом случае:

let pattern = '\<\V'.word.'\m\>'

Обратите внимание, однако, что это не точно , что вы просите.Если пользователь вводит foo(*bar), он будет работать просто отлично, но если он foo(\*bar), он не будет работать, потому что пара \* интерпретируется как модификатор звезды.Если вы не знаете об этих режимах, попробуйте :help /\V, чтобы лучше понять, как работает магия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...