Немного потрудившись, выясняется, что vim может сделать это одной командой без сценариев. Например, чтобы добавить 50 ко всем следующим номерам, <obj param="
вы можете использовать:
:%s@<obj param="\(\d\+\)@\='<obj param="' . (submatch(1) + 50)@g
Позвольте мне сломать это.
:
это общий способ войти / указать режим командной строки в vim.
%
средства в объеме всего документа; Вы можете указать диапазон номеров, например, 1,50
сделать это в первых 50 строках.
s
является сокращением для замены (вы можете написать все слово, если хотите)
@
является разделителем; Вы можете использовать любой другой символ, если он не в том, что вы ищете. Просто используйте это три раза. (Синтаксис похож на sed
.)
Все до следующего вхождения разделителя @ является шаблоном reg ex для поиска, в данном случае <obj param="
за \d\+
которым следует любое количество цифр. \(
И \)
там , чтобы установить всю эту последовательность цифр в качестве одной Изотерм бывшей группы , которая будет соответствовать как обратные ссылки \1
, или VIM в submatch
команде.
Затем разделитель @
помечает то, что следует за текстом замены.
Здесь \=
в начале здесь подразумевается подстановка результата некоторого вычисленного выражения, а не шаблона или строки reg ex, которые здесь являются ключевыми.
Затем мы имеем '<obj param="'
для начала замену текста. Далее .
следует функция vim для объединения строк.
submatch(1)
является встроенной функцией vim, которая может использоваться только внутри команды подстановки и возвращает строку, которая совпадает с регулярным выражением \1
; вы бы использовали submatch(2)
для эквивалентных регулярных выражений \2
и так далее. ( \0
Это весь подходящий шаблон, но мы не хотим , чтобы здесь) . В \(
и \)
в шаблоне поиска используются для разметки , что считается submatch(1)
.
Следовательно, (submatch(1) + 50)
дает результат добавления 50 к числу, за которым следуют цифры <obj param="
в форме поиска.
Разделитель @
снова используется для выделения конца текста замены.
Флаг g
используется, чтобы сделать замены глобальными; Вы можете опустить это, если хотите заменить только первый экземпляр в каждой строке.
Вы можете, вероятно, решить, как складывать разные числа, или вычитать, или делить, и т. Д.
vim
иemacs
могу делать такие вещи, но это может потребовать написания сценария, а не использования одной команды.