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:
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.
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
Jawaban:
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 pattern
dan:help substitute
untuk 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.sumber
(
diperlakukan secara khusus sementara{
tidak: "semua karakter ASCII kecuali '0' - '9', 'a' - 'z', 'A' - 'Z' dan '_' memiliki arti khusus. " Terima kasih!Tidak, Anda tidak dapat menggunakan ekspresi reguler Perl dengan cara itu. Untuk bantuan dalam mempelajari ekuivalen Vim untuk komponen ekspresi reguler Perl, lihat
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
+perl
fitur tersebut. Lihatsumber
:help perl-patterns
telah menyelesaikan satu hal yang sebelumnya saya benci tentang vimAnda juga bisa menggunakan:
dari pada:
sumber
nnoremap / /\v
danvnoremap / /\v
.vimrc Anda sehingga saat Anda mengetiknya/
hanya berfungsi.Ini solusi dari http://vim.wikia.com/wiki/Perl_compatible_regular_expressions
:perldo s/(\w+)/\u$1/g
(Verifikasi dengan
:ver
itu+perl
atau+perl/dyn
dikompilasi.)sumber
Gunakan plugin eregex.vim . Ini sangat berguna dan saya tidak punya masalah dengan itu.
sumber