Bagaimana cara bertindak pada persegi panjang di luar garis akhir?

16

Inilah yang dikatakan dokumentasi Vim tentangnya:

Pengeditan virtual berarti kursor dapat diposisikan di tempat yang tidak memiliki karakter sebenarnya. Ini bisa menjadi setengah tab atau di luar ujung garis. Berguna untuk memilih kotak dalam mode Visual dan mengedit tabel.

Saya lebih suka melihat ini diimplementasikan sebagai mode minor atau pengaturan bawaan.

pengasuh
sumber
Apakah Anda ingin ini memilih persegi panjang? Jika demikian, ini merupakan default dalam versi pengembangan saat ini.
Malabarba
Tidak, saya berpikir lebih suka menarik / mengganti persegi panjang. Saya menggunakan mode tanda persegi panjang dan sementara itu adalah fitur yang bagus itu bukan yang saya cari.
pengasuh
Memang, untuk menarik / mengganti persegi panjang, itu akan menjadi pendamping alami untuk fungsi yang ada dalam mode tanda-persegi panjang. Tidak yakin apa yang seharusnya UI, tho.
Stefan
Terima kasih atas jawabannya, Stefan. Fitur ini akan sangat berguna ketika berhadapan dengan persegi panjang, jadi mungkin sementara dalam mode tanda persegi panjang perintah bisa beralih jenis mode edit virtual. Saat ini dalam mode tanda persegi panjang, titik tersebut terlihat seperti dalam mode edit virtual: titik tersebut dapat bergerak melewati ujung garis C-f. Tetapi ketika Anda menarik persegi panjang setelah melakukan ini, persegi panjang muncul di tanda bukannya pada titik. Jika muncul pada titik, itu akan menyelesaikan masalah ini.
pengasuh

Jawaban:

10

The extend-rectangle-to-endfungsi dalam rectangle-utilspaket adalah apa yang Anda inginkan. Sudah menyala melpa.

Ini menyisipkan spasi untuk membuat pemilihan persegi panjang saat ini diperluas untuk mencakup garis terpanjang di wilayah tersebut.

Untuk mendapatkan perilaku ini, saya punya ini di init.el. C-x r etidak terikat dengan hal lain dalam vanilla emacs

(require 'rectangle-utils)
(global-set-key (kbd "C-x r e") 'extend-rectangle-to-end)
Squidly
sumber
1
Untuk memperjelas, dengan paket ini, Anda memilih wilayah, lalu lakukan M-x extend-rectangle-to-enddan kemudian C-x r M-watau C-x r k.
Kaushal Modi
18

Jawaban lain: gunakan M-x picture-mode. Anda dapat membunuh atau menyalin persegi panjang di tengah-tengah karakter tab dll, mengirimnya ke register, dll.

Drew
sumber
3
Salah satu keuntungan menggunakan metode ini adalah Anda dapat mengontrol dengan tepat seberapa lebar Anda ingin pemilihan persegi panjang Anda. Jika saya memiliki baris 1 dengan 30 karakter dan baris 2 dengan 5 karakter, saya dapat memilih persegi panjang menjadi 15 karakter dan 2 baris tinggi; tidak dapat melakukan itu dengan extend-rectangle-to-endsebagai seleksi kotak dengan itu akan selalu menjadi 30x2.
Kaushal Modi
1
picture-modesudah tua dan tidak banyak diketahui. Di antara beberapa fitur lain yang kurang dikenal: exiting ( C-c C-c) menghapus spasi spasi tambahan.
Drew
1
Itu brilian, Drew! Pertanyaan: adakah alasan untuk tidak menyarankan rectangle-minor-modeagar "dibungkus" picture-mode? (saran karena saya tidak melihat kait di sumber rectangle-minor-mode).
rasmus
1
Ini saran saya, btw. Itu tidak menghapus spasi karena itu semacam tidak pantas untuk di sini:(defun rectangle-mark-mode-wrapped-in-picture-mode (orig-fun &rest args) (if rectangle-mark-mode (picture-mode) (and (eq major-mode 'picture-mode) (picture-mode-exit t)))) (advice-add 'rectangle-mark-mode :around #'rectangle-mark-mode-wrapped-in-picture-mode)
rasmus