Czy mogę używać wyrażeń regularnych Perla w wierszu poleceń vim?

27

Chcę używać wyrażeń regularnych perla w wierszu poleceń vim. Na przykład, aby wpisać wielkie litery w bieżącym wierszu, możesz wpisać:

:s/(\w+)/\u$1/g
użytkownik51549
źródło
Od : pomóż wzorom Perla ... Wyrażenia regularne Vima są najbardziej podobne do wzorców Perla pod względem tego, co możesz zrobić. Różnica między nimi polega głównie na zapisie uhhmm ... to tak jakby powiedzieć, że chiński jest podobny do greckiego pod względem tego, co można komunikować. Różnica polega głównie na zapisie. regex to nic innego jak notacja! Różnice są denerwujące, jeśli jedna notacja jest mniej znana niż inna. Dlatego ludzie pytają przede wszystkim o perla!
dreftymac

Odpowiedzi:

19

Możesz filtrować dowolną linię lub zakres linii za pomocą zewnętrznego polecenia w vimie, używając! Na przykład możesz wykonać:

:.!perl -pe "s/(\w+)/\u\1/g"

który przefiltruje bieżącą linię przez to polecenie perla. (Tutaj, :aby przejść do trybu wiersza poleceń, a .następujące po nim oznaczają bieżącą linię; możesz również określić zakres linii lub %cały plik itp.)

Jeśli chcesz użyć wbudowanych wzorców zastępczych vima, najbliżej przyjdziesz to użyć opcji „bardzo magicznej” vima, \ v, w ten sposób:

:s/\v(\w+)/\u\1/g

zobacz :help patterni :help substitutepo więcej szczegółów. Nie sądzę, że „bardzo magia” jest dość identyczna z wzorami Perla, ale jest bardzo bliska. W każdym razie możesz zawsze używać samego perla, jeśli czujesz się z nim swobodniej, jak wyżej.

frabjous
źródło
1
ponadto, z bardzo magią, nie musisz zapamiętywać, które (jest traktowane specjalnie, dopóki {nie jest: „wszystkie znaki ASCII oprócz„ 0 ”-„ 9 ”,„ a ”-„ z ”,„ A ”-„ Z ”i „_” ma specjalne znaczenie. ” dzięki!
Ayrat
10

Nie, nie możesz w ten sposób używać wyrażeń regularnych Perla. Aby uzyskać pomoc w nauce ekwiwalentów Vima dla składników wyrażeń regularnych Perl, patrz

:help perl-patterns

Możesz jednak użyć Perla jako zewnętrznego filtra, jak wyjaśniono przez frabjous. Możesz także wykonywać polecenia Perla w Vimie, używając interfejsu Perla, jeśli twój Vim został skompilowany z tą +perlfunkcją. Widzieć

:help if_perl.txt
garyjohn
źródło
2
+1, :help perl-patternsrozwiązał jedną rzecz, której wcześniej nie lubiłem w vimie
Mark K Cowan
8

Możesz także użyć:

/\v"your regex"

zamiast:

/"your regex"
Kevin
źródło
Oto odpowiedź, której szukałem!
alextercete,
Możesz także pomóc sobie, dodając nnoremap / /\vi vnoremap / /\vdo .vimrc, aby po wpisaniu działało /.
mattmc3,
2

Użyj wtyczki eregex.vim . Jest to bardzo przydatne i nie miałem z tym żadnych problemów.

DBedrenko
źródło