Как добавить число в строку \ d

387
dalihao

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

1

1 ответ на вопрос

0
Ingo Karkat
: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