Как выровнять функциональность SUBSTITUTE () с функциональностью команды Vim's: replace для данного регулярного выражения? - PullRequest
1 голос
/ 31 марта 2011

Я пытаюсь разобраться, почему это не работает в моей (g) консоли Vim:

:echo substitute("2321||aaaa|vvvv|334|mmmmm","\([0-9]\+\)\(||.*\)$","\1","g")

... но когда курсор находится на строке с текстом 2321||aaaa|vvvv|334|mmmmm, аналогКоманда .s/\([0-9]\+\)\(||.*\)$/\1/g возвращает то, что я ожидаю!(то есть она заменяет строку текстом 2321)


Я сузил ее до следующего несоответствия и хотел бы узнать, как ее обойти.Я ожидаю, что приведенная ниже команда вернет ||aaaa|vvvv||mmmmm:

:echo substitute("2321||aaaa|vvvv|334|mmmmm","\([0-9]\)","","g")

Вместо этого она возвращает неизмененную версию ввода 2321||aaaa|vvvv|334|mmmmm, что означает, что регулярное выражение \([0-9]\) не нашло соответствия.Сняв скобки, команда ниже работает :

:echo substitute("2321||aaaa|vvvv|334|mmmmm","[0-9]","","g")

Похоже, что функция SUBSTITUTE() имеет строго ограниченные возможности регулярных выражений по сравнению с командой :substitute.Однако в документации http://vimdoc.sourceforge.net/htmldoc/eval.html#substitute%28%29 это не упоминается.Есть ли обходной путь, или я пропустил что-то, что упомянуто в другом месте?


(я запускаю gVim на XP)

В качестве отступления: Отвечает ли вопрос какв настоящее время оно сформулировано как добавление или отказ от его ясности / полезности? Я мог бы также использовать более простое, но менее информативное название «вопрос замены Vim», в соответствии со многими другими пользователями этого форума?

1 Ответ

1 голос
/ 31 марта 2011

Либо используйте одинарные кавычки, либо используйте обратную косую черту

:echo substitute("2321||aaaa|vvvv|334|mmmmm",'\([0-9]\+\)\(||.*\)$','\1','g')

См. :help expr-quote и :help literal-string.

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