Как добавить число в строку \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
Другие вопросы по тегам