Saya sering mengekstrak persegi panjang teks dari buffer, tetapi kemudian menemukan saya ingin menarik teks seolah-olah itu bukan persegi panjang. Apakah ada cara untuk menambahkan persegi panjang yang terbunuh saat ini ke cincin bunuh?
The GNU Emacs Pedoman telah mengatakan ini:
"Membunuh" persegi panjang tidak membunuh dalam arti biasa; persegi panjang tidak disimpan di cincin bunuh, tetapi di tempat khusus yang hanya mencatat persegi panjang terakhir yang terbunuh. Ini karena menarik persegi panjang sangat berbeda dari menarik teks linear sehingga perintah yank yang berbeda harus digunakan. Yap-popping tidak didefinisikan untuk persegi panjang.
Namun, pada dasarnya saya bisa mendapatkan perilaku yang saya inginkan
M->
pergi ke akhir bufferC-x r y
menyentak persegi panjangC-x C-x
titik dan tanda tukar (pilih jalur yang baru diseret)C-w
bunuh seleksi ke ring bunuh
Apakah ada cara yang lebih baik untuk mengubah persegi panjang yang terbunuh menjadi entri cincin bunuh?
Jawaban:
Jika saya memahami pertanyaan Anda, Anda mencari sesuatu seperti ini:
Atas perkenan ErgoEmacs
sumber
Tidak yakin apa yang istimewa tentang memiliki persegi panjang di kill-ring, tetapi jika Anda meningkatkan ke Emacs-24.4, maka Anda dapat melakukan:
C-x SPC .... M-w
untuk memilih persegi panjang dan meletakkannya di kill-ring. Setelah ituC-y
akan menarik persegi panjang itu (sama seperti ituC-x r y
, tho).sumber
Saya awalnya terganggu oleh kurangnya solusi built-in untuk masalah ini, kemudian menyadari bahwa ada solusi built-in: kill-rectangle.
Katakanlah Anda memiliki teks seperti
Tetapi ingin bagian 'B' dari teks di tempat lain, seperti antara baris C dan D ini:
Jika Anda menyalin persegi panjang B (
C-x r M-w
) dan kemudian menempatkan titik pada 'D' pertama, lalu menarik kembali persegi panjang (C-x r y
), Anda berakhir dengandi mana Anda benar-benar ingin
Mungkin tampak wajar untuk menyalin persegi panjang 'B's dan mencabutnya ke lokasi baru, tetapi solusi yang lebih baik adalah dengan menyalin garis-garis' A dan 'B' dan dan mencabutnya secara keseluruhan antara 'C' dan ' Garis D.
Kemudian, tandai kotak yang berisi 'A's dan gunakan
kill-rectangle
(C-x r k
) untuk mengakhiri dengan hasil yang diinginkan.sumber