Після того, як трішки побігати, виявляється, що 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\+
, яке є будь-якою кількістю цифр. The \(
and \)
are there, щоб встановити всю цю послідовність цифр як єдину групу reg reg, яка б відповідала зворотним посиланням на зразок \1
, або submatch
команді vim .
Потім роздільник @
відзначає те, що випливає з тексту заміни.
Тут \=
на початку означає підміняти результат деяким оціненим виразом, а не reg ex шаблоном або рядком, що є ключовим тут.
Тоді ми маємо '<obj param="'
для початку текст заміни. Далі .
випливає функція vim для об'єднання рядків.
submatch(1)
- це вбудована функція vim, яка може бути використана лише в команді підстановки і повертає рядок, такий же, як і регулярний вираз \1
; ви б використали submatch(2)
для еквівалента регулярних виразів \2
тощо. ( \0
Це весь ваш смак варіант оформлення, але ми не хочемо , щоб тут) . В \(
і \)
в шаблоні пошуку використовуються для розмітки , що вважається submatch(1)
.
Звідси (submatch(1) + 50)
виходить результат додавання 50 до числа, яке цифри, що слідують <obj param="
у формі пошуку шаблону.
Розмежувач @
знову використовується для позначення кінця тексту заміни.
Прапор g
використовується, щоб зробити заміни глобальними; Ви можете пропустити це, якщо хочете замінити перший екземпляр у кожному рядку.
Ви, мабуть, можете звідти розробити, як додавати різні числа, або віднімати, або ділити тощо.
vim
іemacs
може зробити такого роду речі, але це може зажадати написання сценарію , а не з допомогою однієї команди.