1

Я хочу заменить все строки файла string\d\+ Например, строка10 на строку 20.Я пытался использовать s/\(string\)\d\+/\1\=submatch(0)+10 я знаю \= судья \1 существует или нет.Но help: submatch используйте субматч как это. Как я могу исправить эту команду? Или есть другой способ добиться этого.

1 ответ1

0
:s/\(string\)\d\+/\1\=submatch(0)+10

Ты рядом

  • Нельзя смешивать обычную замену (\1) и :help sub-replace-expression. Как только вы используете последний, вся замена должна быть выражением.
  • Чтобы увеличить число, оно должно быть записано отдельно. submatch(0) - полное совпадение; Вы не можете просто добавить 10 к нему.
  • Если вы хотите заменить все вхождения, вам все равно нужно добавить флаг /g и a :[range] ; иначе, только первое совпадение текущей строки будет увеличено.

Вот один вариант с полным захватом:

:%substitute/\(string\)\(\d\+\)/\=submatch(1) . (submatch(2) + 10)/g

Поскольку вы ничего не делаете с префиксом string , мы можем альтернативно утверждать его (но не включать его) с помощью :help /\zs ; тогда нам не нужен захват

:%substitute/string\zs\d\+/\=submatch(0) + 10/g

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