1

Я пытаюсь использовать команду vim submatch, чтобы поместить кавычки вокруг всех строк символов в строке текста, и это не работает. Вот что я делаю

:s:\a*\a:\(submatch(0)\):g

Все, что он делает, это заменяет все строки на строку (submatch (0)). Как заставить vim делать то, что я пытаюсь сделать?

2 ответа2

6

субматч не лучшее решение для этого. Я делаю некоторую помощьgrep на \\=

И я нахожу это:

                *sub-replace-special* *:s\=*
When the {string} starts with "\=" it is evaluated as an expression, see
|sub-replace-expression|.  You can use that for any special characters.
Otherwise these characters in {string} have a special meaning:

Если вы настаиваете на использовании submatch, вы можете использовать его следующим образом:

s:\a*\a:\='"'.submatch(0).'"'

Однако более читаемое решение:

s:\a*\a:"\0"
4

Вы должны захватить каждое совпадение, окружив образец парой скобок \( и \) . Сделав это, вы можете использовать фактический сопоставленный текст в шаблоне замены с \1 .

Следующая команда делает то, что вы хотите:

:s:\(\a*\a\):"\1":g

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .