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
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
Risposte:
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 pattern
e :help substitute
per 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.
(
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!
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 +perl
funzione. Vedere
:help if_perl.txt
:help perl-patterns
ha risolto l'unica cosa che in precedenza odiavo di vim
Puoi anche usare:
/\v"your regex"
invece di:
/"your regex"
nnoremap / /\v
e vnoremap / /\v
al tuo .vimrc in modo che quando digiti /
funzioni.
Utilizzare il plug-in eregex.vim . È molto utile e non ho avuto problemi con esso.
Ecco una soluzione da http://vim.wikia.com/wiki/Perl_compatible_regular_expressions
:perldo s/(\w+)/\u$1/g
(Verifica con :ver
quello +perl
o +perl/dyn
è compilato in.)