W Vimie możesz użyć kotwic o zerowej szerokości \zsi \zezdefiniować początek i koniec szukanego wzoru, które chcesz dopasować. Zastąpienie nie wpłynie na nic przed \zsi po \zetwoim wzorze.
Możesz wyszukać ostatnie dopasowanie, grupując wszystkie \(.*\), ale ostatnie wystąpienie pattern. Następnie wyjdź z przechwyconą grupą \1i dodaj replacement.
(Jest to gorsze od \zsrozwiązania @ ryuichiro , ponieważ twoje \1podejście jest funkcjonalnie równoważne, ale bardziej szczegółowe. (Z drugiej strony może być łatwiejsze do zapamiętania dla niektórych, szczególnie jeśli są przyzwyczajeni do innych smaków regex.))
Aaron Thoma
0
Dla kompletności pomyślałem, że opublikuję alternatywę. Vim ma wiele elementów, z których niektóre są podobne do bardziej standardowych stwierdzeń dotyczących wyrażeń regularnych (negatywne / pozytywne lookahead / lookbehind). /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
W tym przypadku chcemy negatywnego spojrzenia w przód, \@!co oznacza, że chcemy stwierdzić, że atom poprzedzający element nie występuje po wzorze . W tym przypadku atom jest samym wzorem poprzedzonym czymkolwiek innym:
:%s/pattern\(.*pattern\)\@!/replacement/
Część w nawiasach ma zerową szerokość i nie jest uwzględniona w dopasowaniu, więc nie jest zastępowana przez podstawienie.
:h \@!aby uzyskać więcej informacji lub :h pattern-multi-itemsdla całej sekcji zawierającej inne odmiany wyglądu.
\zs
zawiera twoja odpowiedź?.*
jest chciwość .Możesz wyszukać ostatnie dopasowanie, grupując wszystkie
\(.*\)
, ale ostatnie wystąpieniepattern
. Następnie wyjdź z przechwyconą grupą\1
i dodajreplacement
.źródło
\zs
rozwiązania @ ryuichiro , ponieważ twoje\1
podejście jest funkcjonalnie równoważne, ale bardziej szczegółowe. (Z drugiej strony może być łatwiejsze do zapamiętania dla niektórych, szczególnie jeśli są przyzwyczajeni do innych smaków regex.))Dla kompletności pomyślałem, że opublikuję alternatywę. Vim ma wiele elementów, z których niektóre są podobne do bardziej standardowych stwierdzeń dotyczących wyrażeń regularnych (negatywne / pozytywne lookahead / lookbehind). /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
W tym przypadku chcemy negatywnego spojrzenia w przód,
\@!
co oznacza, że chcemy stwierdzić, że atom poprzedzający element nie występuje po wzorze . W tym przypadku atom jest samym wzorem poprzedzonym czymkolwiek innym:Część w nawiasach ma zerową szerokość i nie jest uwzględniona w dopasowaniu, więc nie jest zastępowana przez podstawienie.
:h \@!
aby uzyskać więcej informacji lub:h pattern-multi-items
dla całej sekcji zawierającej inne odmiany wyglądu.źródło