Bisakah saya menggunakan ekspresi reguler perl di baris perintah vim?

27

Saya ingin menggunakan perl ekspresi reguler pada baris perintah vim. Misalnya, untuk menggunakan huruf besar pada kata pada baris saat ini, Anda dapat mengetik:

:s/(\w+)/\u$1/g
pengguna51549
sumber
Dari : help perl-pattern ... Vim's regexes paling mirip dengan Perl, dalam hal apa yang dapat Anda lakukan. Perbedaan di antara mereka sebagian besar hanya notasi uhhmm ... itu seperti mengatakan Cina mirip dengan bahasa Yunani, dalam hal apa yang dapat Anda komunikasikan. Perbedaannya kebanyakan hanya notasi. regex ada tapi notasi! Perbedaannya menjengkelkan jika satu notasi kurang dikenal daripada yang lain. Itu sebabnya orang bertanya tentang perl di tempat pertama!
dreftymac

Jawaban:

19

Anda dapat memfilter setiap baris atau rentang garis melalui perintah eksternal di vim, menggunakan! Misalnya, Anda dapat melakukan:

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

yang akan menyaring garis saat ini melalui perintah perl. (Di sini :untuk masuk ke mode baris perintah, dan .yang berikut berarti baris saat ini; Anda juga dapat menentukan rentang garis atau %untuk seluruh file, dll.)

Jika Anda ingin menggunakan vim yang dibangun dalam pola substitusi, yang terdekat Anda akan datang adalah menggunakan opsi "sangat ajaib" vim, \ v, seperti:

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

lihat :help patterndan :help substituteuntuk lebih jelasnya. Saya tidak berpikir "sangat ajaib" cukup identik dengan pola perl, tetapi sangat dekat. Bagaimanapun, Anda selalu dapat menggunakan perl itu sendiri jika Anda lebih nyaman dengan itu, seperti di atas.

luar biasa
sumber
1
juga, dengan sangat ajaib, Anda tidak harus mengingat yang (diperlakukan secara khusus sementara {tidak: "semua karakter ASCII kecuali '0' - '9', 'a' - 'z', 'A' - 'Z' dan '_' memiliki arti khusus. " Terima kasih!
Ayrat
10

Tidak, Anda tidak dapat menggunakan ekspresi reguler Perl dengan cara itu. Untuk bantuan dalam mempelajari ekuivalen Vim untuk komponen ekspresi reguler Perl, lihat

:help perl-patterns

Namun, Anda dapat menggunakan Perl sebagai filter eksternal seperti yang dijelaskan oleh frabjous. Anda juga dapat menjalankan perintah Perl dalam Vim menggunakan antarmuka Perl, jika Vim Anda dikompilasi dengan +perlfitur tersebut. Lihat

:help if_perl.txt
garyjohn
sumber
2
+1, :help perl-patternstelah menyelesaikan satu hal yang sebelumnya saya benci tentang vim
Mark K Cowan
8

Anda juga bisa menggunakan:

/\v"your regex"

dari pada:

/"your regex"
Kevin
sumber
Ini jawaban yang saya cari!
alextercete
Anda juga dapat membantu diri sendiri dengan menambahkan nnoremap / /\vdan vnoremap / /\v.vimrc Anda sehingga saat Anda mengetiknya /hanya berfungsi.
mattmc3
2

Gunakan plugin eregex.vim . Ini sangat berguna dan saya tidak punya masalah dengan itu.

DBedrenko
sumber