Komentarz "trochę szybciej" jest dokładny, ponieważ jest trochę mniej księgowości do zrobienia, ale nacisk kładzie się raczej na "trochę" niż "szybciej". Zasadniczo, materiał dopasowany przez \(pattern\)
musi być przechowywany, aby można było użyć \3
(dla odpowiedniej liczby), aby odnosić się do niego w zastępstwie. Zapis %
oznacza, że vim
nie musi śledzić meczu - więc wykonuje trochę mniej pracy.
@SimpleQuestions pyta:
Co masz na myśli przez "śledzić mecz"? Jak wpływa na szybkość?
Możesz użyć nawiasów z przypisanymi klawiszami, aby "przechwycić" części dopasowanego wzoru. Na przykład, załóżmy, że gramy z prostych deklaracji funkcji C - nie wskaźniki do funkcji lub innych źródeł nawiasach - wtedy możemy mieć polecenie zamiany takie jak:
[email protected]\<\([a-zA-Z_][a-zA-Z_0-9]*\)(\([^)]*\))@xyz_\1(int nargs) /* \2 */@
Biorąc przewód wejściowy, takich jak:
int simple_function(int a, char *b, double c)
wyjście będzie:
int xyz_simple_function(int nargs) /* int a, char *b, double c */
(Dlaczego warto robić Wyobrażam sobie, że muszę zawinąć funkcję C simple_function
tak, że można go wywołać z języka skompilowanego do C, który używa innej konwencji interfejsu - w oparciu o Informix 4GL, aby być precyzyjnym. Używam go dostać przykładowe - nie dlatego, że naprawdę trzeba wiedzieć, dlaczego to była dobra zmiana zrobić)
Teraz na przykład \1
i \2
w tekście zastępującym patrz przechwyconych części. wyrażenia regularnego - nazwa funkcji (sekwencja znaków alfanumerycznych zaczynająca się od znaku alfabetycznego - zliczająca podkreślenie jako "alfabetyczna") i lista argumentów funkcji (wszystko między nawiasami, ale bez nawiasów).
Jeśli użyłbym notacji \%(....\)
wokół identyfikatora funkcji, to \1
odwołałoby się do listy argumentów i nie byłoby \2
. Ponieważ vim
nie musiałby śledzić jednej z dwóch przechwyconych części wyrażenia regularnego, ma on do czynienia z marginalnie mniejszą księgą niż wtedy, gdyby musiał śledzić dwie przechwycone części. Ale, jak powiedziałem, różnica jest niewielka; prawdopodobnie nigdy nie zmierzyłbyś tego w praktyce.Dlatego w podręczniku napisano: "umożliwia więcej grup"; Jeśli chcesz pogrupować części wyrażenia regularnego, ale nie musisz się do nich odsyłać ponownie, możesz pracować z dłuższymi wyrażeń regularnych. Jednak do czasu, gdy masz więcej niż 9 zapamiętanych (przechwyconych) części do regularnego wyrażenia, twój mózg zwykle robi zawroty głowy, a twoje palce i tak będą popełniać błędy - więc wysiłek nie jest zwykle wart tego. Ale to jest, jak sądzę, argument za użyciem notacji \%(...\)
. Pasuje do zapisu Perl (PCRE) "(?:...)
" dla niezapisującego wyrażenia regularnego.
Co masz na myśli przez "śledzenie meczu"? Jak wpływa na szybkość? –
Tak naprawdę sprawdziłem - i działa tak, jak stwierdzono. I sprawdziłem wersję \% (\\) - nie pokazaną powyżej - i to też zadziałało. Uff! Nie dzieje się to za każdym razem, gdy wszystko działa poprawnie. Byłem przekonany o tej koncepcji ... ale nadal dobrze jest sprawdzić rzeczywistość. –