Я пытаюсь разобраться, почему это не работает в моей (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», в соответствии со многими другими пользователями этого форума?