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,50
po 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 \1
lub vim za submatch
polecenie.
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 \2
i tak dalej. ( \0
to 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 g
sł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.
vim
iemacs
mogę to zrobić, ale może to wymagać napisania skryptu, a nie użycia pojedynczego polecenia.