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

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.


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

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"

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


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.