Bagaimana cara menggunakan nomor baris relatif dalam mode baris perintah?

16

Baru-baru ini saya belajar dari Praktis Vim cara menyalin atau memindahkan blok garis tanpa harus memindahkan kursor dari posisi saat ini. Ini dilakukan dalam mode baris perintah. misalnya

:123,133m.  # moves lines from 123 to 133 below the cursor position.

Meskipun saya menyukainya, sangat sulit untuk mengetikkan angka-angka garis panjang, terutama ketika file memiliki terlalu banyak baris.

Kadang-kadang, garis untuk bergerak relatif dekat dengan kursor (tapi saya tidak ingin memindahkan kursor saya, ya, kembali ke tempat saya sebelumnya, tempel!). Akan lebih bagus jika saya bisa menggunakan angka relatif, mirip dengan yang kita lakukan dalam mode normal. Itu seperti mengatakan

pindahkan 5 baris yang 10 baris di atas garis saat ini ke sini

Singkatnya, bagaimana cara menggunakan angka relatif dalam mode baris perintah (mirip dengan mode normal)?

rpattabi
sumber

Jawaban:

23

Dengan asumsi garis Anda membentang dari 15 hingga 10 garis di atas yang sekarang, Anda dapat mencapai apa yang Anda minta menggunakan nomor garis relatif:

:-10,-15m.

Sayangnya ketika menentukan rentang mundur, Vim meminta Anda untuk mengkonfirmasi apakah itu yang benar-benar Anda inginkan. Untuk menghindari langkah konfirmasi, Anda bisa mengetik silentsebelum perintah Anda, atau cukup menentukan rentang ke depan:

:-15,-10m.

Seperti yang Anda harapkan +dapat digunakan untuk merujuk ke baris di bawah yang sekarang.

Bantuan terperinci dapat ditemukan dengan:

:help cmdline-ranges
joeytwiddle
sumber
1
Tapi saya belum pernah menggunakan fitur ini. Saya lakukan 15k d5j 10j P.
joeytwiddle
Perbedaannya adalah bahwa 15k, 5j bekerja dalam mode perintah, dan yang dijelaskan dalam jawabannya adalah dalam mode sisipkan. Jadi berdasarkan mode kita dapat memilih yang sesuai. Perintah dalam mode penyisipan umumnya kriteria seleksi untuk menjalankan perintah lain.
Soundararajan
12

Anda dapat menggunakan angka keras dalam rentang Anda:

:200,300command

Atau angka relatif:

:-27,+46command

Atau tanda manual:

:'a,'bcommand

Atau tanda otomatis:

:'[,'>command

Atau pencarian:

:?foo?,/bar/command

Atau pintasan baris:

:.,$command

Atau kombinasi trik di atas:

:?foo?,+46command
:'a,$command
...
romainl
sumber
3

Anda dapat menggunakan pengalamatan relatif (mis. .-10,.+3) Dengan perintah Ex apa saja, cp. :help :range.

Atau, lihat plugin LineJuggler saya ; ini menyediakan beberapa pemetaan singkat untuk memindahkan garis di sekitar atau menduplikasi mereka, dan semua pemetaan itu mengambil offset garis relatif sebagai [count].

Ingo Karkat
sumber