memilih rentang garis dari baris perintah

8

Saya perlu (visual) memilih rentang garis dari baris perintah.

Sebagai contoh, perintah berikut :?^\s*for?+,/^\s*end/- pmencetak semua baris yang berisi antara a fordan end(cara eksklusif). Alih-alih melakukan operasi pencetakan, saya ingin beralih ke mode visual dengan garis-garis yang disorot. Saya mencari di manual tetapi saya tidak dapat menemukan ex-command seperti itu.

nicmus
sumber
Apakah maksud Anda "eksklusif"?
Kaya
kamu benar! Saya mengedit pertanyaan
nicmus

Jawaban:

7

Batas-batas pemilihan mode visual ditentukan oleh tanda <dan >.

Dengan demikian, perintah berikut akan memasuki mode visual dengan garis 5 hingga 10 (inklusif) dipilih:

 :5mark < | 10mark > | normal gvV
  • :5mark < mengatur awal seleksi ke baris 5,
  • :10mark > setel akhir seleksi ke baris 10,
  • gv memasuki mode visual dengan area yang ditentukan di atas dipilih,
  • V membuat seleksi secara berurutan.

Anda dapat melewatkan rentang Vim apa pun ke dalam :markperintah: berikut ini akan memasuki mode visual menggunakan ekspresi reguler foodan baruntuk menentukan batas-batas area pemilihan:

:execute search("foo") . "mark <" | execute search("bar") . "mark >" | normal gvV

Perintah berikut adalah versi yang lebih sederhana di atas, tetapi tergantung pada posisi kursor:

/foo/mark < | /bar/mark > | normal gvV

Untuk penjelasan lebih lanjut, lihat:

Kaya
sumber
Terima kasih! Saya diselesaikan dengan:?^\s*for?+ mark < | /^\s*end/- mark > | norm gv
nicmus
@nicmus Ah ya, itu lebih sederhana untuk penggunaan khusus Anda. Saya telah memperbarui jawaban saya.
Kaya
Hanya demi pembaca masa depan yang mungkin bertanya-tanya, komentar +dan -di @ nicmus sedang menyesuaikan rentang untuk membuat pilihan tidak termasuk garis yang cocok dengan ekspresi reguler. (Lihat :help range)
Kaya
The .concatenation operator benar-benar melemparkan saya off jadi di sini adalah contoh jika seseorang merasakan hal yang sama: :execute "l" . "s"akan menghasilkan output yang sama seperti :ls.
Toraritte