Po nieco więcej pogrzebaniu, okazuje się, że vim może to zrobić za pomocą jednego polecenia, bez skryptów. Na przykład, aby dodać 50 do wszystkich następujących liczb, <obj param="możesz użyć:
:%s@<obj param="\(\d\+\)@\='<obj param="' . (submatch(1) + 50)@g
Pozwól mi to zepsuć.
: jest ogólnym sposobem wprowadzania / oznaczania trybu wiersza poleceń w vimie.
%oznacza w ramach całego dokumentu; możesz podać zakres liczb, np. 1,50po prostu zrobić to w pierwszych 50 wierszach.
s jest skrótem do zastępstwa (jeśli chcesz, możesz napisać całe słowo)
@jest ogranicznikiem; możesz użyć dowolnej innej postaci, o ile nie ma jej w tym, czego szukasz. Po prostu użyj go trzy razy. (Składnia jest podobna do sed.)
Wszystko do następnego wystąpienia separatora @ to wzorzec reg ex, którego należy szukać, w tym przypadku <obj param="po nim \d\+, czyli dowolna liczba cyfr. \(I \)są tam ustawić całą sekwencję cyfr jako pojedynczy reg ex grupy, która będzie pasować jak odwołania wstecznego \1lub vim za submatchpolecenie.
Następnie separator @oznacza to, co następuje jako tekst zastępczy.
Na \=początku tutaj oznacza zastąpienie wyniku jakiegoś wyrażonego wyrażenia zamiast wzorca reg ex lub łańcucha, który jest tutaj kluczowy.
Następnie mamy '<obj param="'początek tekstu zastępczego. .Który następuje jest funkcja Vima na łączenie ciągów.
submatch(1)jest wbudowaną funkcją vima, której można używać tylko w poleceniu podstawienia, i zwraca ciąg znaków taki sam jak wyrażenie regularne \1; użyjesz submatch(2)jako odpowiednika wyrażeń regularnych \2i tak dalej. ( \0to cały dopasowany wzór, ale nie chcemy tego tutaj.) Wzorzec \(i \)w wyszukiwaniu są używane do zaznaczenia tego, co się liczy submatch(1).
Stąd (submatch(1) + 50)daje wynik dodania 50 do liczby, która następuje po cyfrach <obj param="w formularzu wzorca wyszukiwania.
Separator @jest ponownie używany do oznaczania końca tekstu zastępczego.
Flaga gsłuży do globalnego zastąpienia podstawień; możesz to pominąć, jeśli chcesz tylko zastąpić pierwszą instancję w każdej linii.
Prawdopodobnie możesz dowiedzieć się, jak dodawać różne liczby, odejmować, dzielić itp.
vimiemacsmogę to zrobić, ale może to wymagać napisania skryptu, a nie użycia pojedynczego polecenia.