Terapkan perintah mode normal untuk regex cocok


10

Saya menggunakan ekspresi reguler berikut untuk mencocokkan string dokumentasi di bawah definisi fungsi Clojure:

\vdefn.*\n\s*\zs"([^"]|\n)*"

Apakah ada cara untuk menjalankan perintah mode normal gq(format lines) pada semua kecocokan dari pola ini dalam file yang diberikan?

Jawaban:


10

Kekuatan g:

:g/\vdefn.*\n\s*\zs"([^"]|\n)*"/normal gngq

Bagian antara /s cukup jelas, karena itu adalah regex dari pertanyaan awal Anda.

normal gngqpada akhirnya agak menarik. gnakan memilih kecocokan berikutnya dari persamaan reguler, dan gq, tentu saja, memformat pemilihan ini (seperti yang Anda sebutkan dalam pertanyaan Anda).

:gadalah bagian yang sangat bagus. Menurut saya, inilah salah satu fitur Vim yang paling berguna. The gex perintah mengambil regex dan perintah Ex, dan mengeksekusi perintah pada setiap baris pertandingan regex. Jika Anda belum belajar :g, saya sangat menyarankan melakukannya, karena akan sangat meningkatkan produktivitas Anda. Beberapa sumber adalah Vim sendiri :help :gatau Kekuatan g pada Vim wiki.


The gnpiece adalah memilih dari garis mana Vdipicu ke depan (bukan yang ada di baris yang sama) terjadinya pola. Dokumentasi Vim menyatakan bahwa jika mode visual aktif, pemilihan diperluas dari garis saat ini melalui pola berikutnya. Ini menyebabkan perilaku yang tidak diinginkan.

@ mart Whoops, tidak menyadari itu. Diedit.
Gagang pintu

Pilihan masih dari garis pertandingan ke pertandingan berikutnya . Melangkah melalui perintah mode normal secara manual menunjukkan yang //s<cr>membuat saya di awal pertandingan pada baris saat ini, tetapi //e<cr>meninggalkan saya di akhir pertandingan berikutnya, bukan pertandingan saat ini.

1
Masalahnya tampaknya dengan //s<cr>V. Ketika saya menjalankan :normal Vsaya masuk ke mode garis visual, seperti yang diharapkan. Ketika saya menjalankan :normal //s<cr>kursor saya mendarat di pertandingan pertama ", seperti yang diharapkan. Ketika saya menjalankan :normal //s<cr>Vsaya tidak mendapatkan pilihan visual.

1
Selesaikan itu. Perintahnya harus normal gngq. Menyarankan hasil edit.
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.