Как добавить число в строку \d
Я хочу заменить файл все string\d\+
Например, от строки 10 до строки 20. Я пытался использовать s/\(string\)\d\+/\1\=submatch(0)+10
я знаю \=
судья \1
существует или нет. Но help: submatch
используйте как это. Как я могу исправить эту команду или есть другой метод для достижения этой цели.
1 ответ
Решение
:s/\(string\)\d\+/\1\=submatch(0)+10
Ты рядом
- Нельзя смешивать нормальную замену (
\1
) а также:help sub-replace-expression
, Как только вы используете последний, вся замена должна быть выражением. - Чтобы увеличить число, оно должно быть записано отдельно.
submatch(0)
это весь матч; вы не можете просто добавить10
к этому. - Если вы хотите заменить все вхождения, вам все равно нужно добавить
/g
флаг и:[range]
; иначе, только первое совпадение текущей строки будет увеличено.
Вот один вариант с полным захватом:
:%substitute/\(string\)\(\d\+\)/\=submatch(1) . (submatch(2) + 10)/g
Как вы ничего не делаете с string
префикс, мы можем альтернативно утверждать на нем (но не включать его) через :help /\zs
; тогда нам не нужен захват:
:%substitute/string\zs\d\+/\=submatch(0) + 10/g