Posso usare le espressioni regolari perl nella riga di comando di vim?


26

Voglio usare le espressioni regolari perl sulla riga di comando di vim. Ad esempio, per scrivere in maiuscolo le parole sulla riga corrente, è possibile digitare:

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

Da : help perl-patterns ... Le regex di Vim sono molto simili a quelle di Perl, in termini di cosa puoi fare. La differenza tra loro è per lo più solo notazione uhhmm ... è come dire che il cinese è simile al greco, in termini di ciò che puoi comunicare. La differenza è principalmente solo notazione. regex non è altro che notazione! Le differenze sono fastidiose se una notazione è meno familiare di un'altra. Ecco perché le persone chiedono perl in primo luogo!
dreftymac,

Risposte:


18

Puoi filtrare qualsiasi linea o intervallo di linee attraverso un comando esterno in vim, usando!. Ad esempio, puoi fare:

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

che filtrerà la riga corrente attraverso quel comando perl. (Qui :per entrare in modalità riga di comando, e ciò .che segue significa la riga corrente; puoi anche specificare un intervallo di linee o %per l'intero file, ecc.)

Se vuoi usare i modelli di sostituzione integrati di vim, il più vicino che verrai è usare l'opzione "molto magica" di vim, \ v, in questo modo:

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

vedi :help patterne :help substituteper maggiori dettagli. Non penso che "molto magico" sia abbastanza identico ai modelli di perl, ma è molto vicino. Ad ogni modo, puoi sempre usare il perl stesso se ti senti più a tuo agio, come sopra.


1
inoltre, con molta magia, non è necessario memorizzare ciò che (viene trattato in modo speciale mentre {non lo è: "tutti i caratteri ASCII tranne '0' - '9', 'a' - 'z', 'A' - 'Z' e '_' ha un significato speciale. " Grazie!
Ayrat,

9

No, non puoi usare le espressioni regolari Perl in quel modo. Per informazioni sull'apprendimento degli equivalenti di Vim per i componenti delle espressioni regolari Perl, vedere

:help perl-patterns

Tuttavia, puoi usare Perl come filtro esterno come spiegato da frabjous. Puoi anche eseguire i comandi Perl all'interno di Vim utilizzando l'interfaccia Perl, se Vim è stato compilato con la +perlfunzione. Vedere

:help if_perl.txt

2
+1, :help perl-patternsha risolto l'unica cosa che in precedenza odiavo di vim
Mark K Cowan il

8

Puoi anche usare:

/\v"your regex"

invece di:

/"your regex"

Questa è la risposta che stavo cercando!
alextercete,

Puoi anche aiutarti aggiungendo nnoremap / /\ve vnoremap / /\val tuo .vimrc in modo che quando digiti /funzioni.
mattmc3,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.