Podsumowując, nie. Wyrażenie regularne Vima jest unikalnym smakiem i nie ma opcji, aby zachowywał się bardziej jak inny smak.
Myślę, że to dobra rzecz.
magia
Ta 'magic'
opcja nie zmienia smaku wyrażenia regularnego używanego przez Vima. Po prostu odwraca zachowanie wielu \
atomów.
Na przykład domyślnie +
jest literalnym +
znakiem, gdzie \+
oznacza „jeden lub więcej z poprzedniego atomu”. Natomiast *
oznacza „zero lub więcej poprzedniego atomu”, podczas gdy \*
jest dosłowne *
. Wiele osób uważa to za dość mylące. Zastosowanie \v
we wzorze powoduje, że jest on bardziej spójny. :help 'magic'
daje dobre podsumowanie:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
Osobiście uważam, że domyślne zachowanie jest dobre w przypadku plików kodu, w których nierzadko szuka się czegoś takiego foo(
, jak użycie literału (
.
Smak regexowy Vima
Byłem świadkiem wielu osób, które chciałyby, żeby Vim wspierał PCRE. Osobiście chciałbym, aby inne narzędzia wspierały smak wyrażenia regularnego Vima. Ma pewne możliwości, które są niemożliwe lub zbyt uciążliwe do osiągnięcia w PCRE.
Niemożliwe w PCRE
Lookaround to wspólna funkcja, w której można stwierdzić, że wzorzec jest zgodny lub nie pasuje przed lub po wzorcu, który próbujesz dopasować. Na przykład wzorzec PCRE q(?!u)
(lub wzorzec regularny Vima qu\@!
) odpowiada wzorcowi, po q
którym nie następuje u
. (Jest to bardziej poprawne niż q[^u]
, które wymaga, aby po znaku była jakaś postać q
).
Negatywny wygląd za zmienną długością
PCRE i wiele innych smaków ma ograniczenie, że negatywny wzór za wyglądem musi mieć określoną długość. Oznacza to, że wzorzec typu (?<![a-z]{3})foo
, oznaczający „ciąg foo
nie poprzedzony dokładnie 3 małymi literami”) jest w porządku, ale (?<![a-z]+)foo
(co oznacza, że „ciąg foo
nie poprzedzony żadną liczbą małych liter”) nie jest w porządku .
To ograniczenie nie istnieje w Vimie. W Vimie wzór \([a-z]\+\)\@<!foo
, choć może trochę brzydki, jest całkowicie poprawny.
Łatwiej w wyrażeniu regularnym Vima
Niektóre rzeczy są o wiele ładniejsze w smaku wyrażeń regularnych Vima.
Początek i koniec kotwic zapałek
Moim zdaniem najbardziej godne uwagi są kotwice \zs
i \ze
. Pozwalają one określić początek i koniec meczu. Na przykład foo(\zs.*\ze)
dopasowuje tylko to, co znajduje się między (
i )
w wywołaniu funkcji, takim jak foo(...)
. Można to zrobić w PCRE, ale wymaga użycia lookaround, co jest nieco uciążliwe:(?<=foo\().*(?=\))
Dopasowywanie prefiksów
Kolejną fajną rzeczą, którą Vim może zrobić, jest dopasowanie dowolnego prefiksu (w tym pustego prefiksu) określonej sekwencji znaków. Na przykład, aby dopasować na f
, fo
, foo
lub food
, wzór f\%[ood]
może być stosowany. W PCRE taki wzór wyglądałby f(o(od?)?)?
. (Wyobraź to sobie na dłuższy ciąg!)
Dopasowywanie pozycji kursora, linii i kolumny
Wyrażenie regularne Vima zawiera pewne kotwice do dopasowywania pozycji w buforze.
\%23c
dopasowuje kolumnę 23
\%<23c
mecze przed kolumną 23
\%>23c
mecze po kolumnie 23
\%16l
dopasowuje linię 16
- Podobnie jak w kolumnie, istnieją zakotwiczenia przed lub po numerze linii
\%#
dopasowuje pozycję kursora
Myślę, że warto poświęcić Vimowi smak wyrażenia regularnego. Jest dobrze przystosowany do użycia w edytorze tekstu używanym głównie do programowania i jest dość wydajny.
\v
są<>
granice słów, które AFAIK jest unikalny dla Vima. Więc nie, po prostu opisz je jako „Wyrażenie regularne Vima”. (Nie publikuję jako odpowiedzi, ponieważ nie jestem pozytywny)