Я хочу заменить все строки файла 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