Saya ingin menumbuhkan pilihan tanpa memindahkan titik (kursor) dari lokasinya. Saya tahu saya selalu dapat menggunakan C-u C-spc
untuk pindah ke lokasi sebelumnya, tetapi saya ingin menghindari itu.
Lebih khusus lagi, saya ingin melakukan kedua operasi ini:
- Pilih semua teks dalam buffer
- Tambahkan baris / paragraf berikutnya ke seleksi secara bertahap
sambil menjaga kursor di tempatnya.
Apakah Emacs memiliki fungsi interaktif untuk ini? Apakah mereka terikat pada pintasan keyboard?
C-u C-spc
.Jawaban:
Ada jawaban terpisah untuk setiap poin yang Anda cantumkan:
Ikatan default emacs C-x hakan memilih seluruh buffer terlepas dari di mana kursor berada.
Paket memperluas-wilayah akan membantu mencapai tujuan kedua secara bertahap memperluas seleksi.
expand-region
pada akhirnya juga akan memilih seluruh buffer saat Anda terus memperluas wilayah. Lihatlah readme-nya di github untuk info lebih lanjut. Paket ini tersedia melalui MELPA.Berikut adalah pengantar singkat untuk paket ini dari github-nya:
Saya ingin menambahkan bahwa memodifikasi pemilihan wilayah dalam kedua kasus akan tetap memindahkan kursor.
sumber
C-x h
tidak memindahkan kursor: ke ujung buffer dan kemudian ke awal buffer. Anda perluC-u C-spc
dua kali untuk kembali ke tempat Anda sebelumnya.Jika wilayah tumbuh maka kursor berubah posisi. Ini karena kursor selalu berada di salah satu ujung wilayah.
Jika Anda memilih semua teks buffer (
C-x h
dan kemudian gunakanC-x C-x
untuk bertukar titik dan tandai, sehingga kursor berada di akhir teks), dan kemudian Anda mengetik beberapa teks lagi, maka Anda telah mencapai apa yang Anda inginkan: wilayah tersebut telah diperluas untuk memasukkan teks yang Anda ketikkan. (Ini mengasumsikan Anda tidakdelete-selection-mode
dihidupkan.)Wilayah juga telah dinonaktifkan, secara otomatis, sehingga teks wilayah tidak lagi disorot. Untuk mengaktifkan kembali wilayah, lakukan
C-x C-x
(yang dapat Anda ulangi, jika Anda ingin menjaga kursor di ujung penyangga.sumber
Seperti disebutkan,
expand-region
paketnya bagus tapi saya juga merasa layak disebutkaneasy-kill
. Itu ditagih sebagai setetes penggantikill-ring-save
yang mengubahM-w
"salinan" normal menjadi perintah salin dinamis yang juga bertindak sebagai awalan untuk menyimpan berbagai hal. Sebagai contoh,M-w
akan menyalin wilayah aktif, url, email atau baris saat ini (dalam urutaneasy-kill-try-things
) tetapi diikuti oleh "d"M-w d
itu akan secara paksa menyalin pembelotan saat ini.Ada juga metode memperluas / mengecilkan pilihan saat ini, agak seperti
expand-region
, serta perintah yang dipanggileasy-mark
untuk menandai daerah tanpa mengubah titik Anda saat ini.sumber
Setelah menyalin sesuatu, Anda dapat menambahkan teks ke pilihan nanti dengan menggunakan
C-M-w
:C-M-w
(append-next-kill
) dan kemudian salin apa yang Anda inginkan (M-w
).sumber
Sebagaimana dinyatakan dalam jawaban lain:
C-xh akan memilih seluruh buffer;
(mark-whole-buffer)
Jika Anda ingin mengembangkan pilihan Anda, cara termudah adalah menggunakan
mark-*
perintah.Sebagai contoh keybound:
C-M-SPC
(mark-sexp)
akan menandai sexp pada titik tersebut. Jika Anda mengulangi perintah, itu akan menambahkan sexp berikut ke seleksi. Kursor akan tetap pada posisi saat ini, atau pindah ke awal objek (paragraf / sexp) untuk memastikan itu sepenuhnya ditandai.sumber
(mark-whole-buffer)
ke <kbd> Cmd-a </kbd> di OSX untuk menjaga kesamaan dengan fungsionalitas OSX yang khas.Jika Anda setuju menggunakan mouse, Anda dapat menggunakan pilihan kedua . Tekan Meta, lalu klik dan seret tombol kiri mouse (
M-drag-mouse-1
). Ini tidak memindahkan intinya selama Anda hanya menyalin teks yang terlihat di layar. Anda dapat menyalin pilihan sekunder denganM-mouse-3
dan mencabutnya denganM-mouse-2
.Terlepas dari pilihan kedua, Anda perlu memindahkan kursor untuk memilih teks yang berubah-ubah, karena kursor adalah salah satu ujung pilihan (yang lainnya adalah tanda).
Jika Anda ingin bekerja di buffer tanpa mempengaruhi titik, Anda dapat membuka buffer di jendela kedua (
C-x 2
atauC-x 3
). Setiap jendela memiliki poinnya sendiri. Setelah selesai memilih dan mengedit, tutup jendela (C-x 0
) dan kembali ke yang lain.Untuk lebih fleksibel, Anda dapat mengkloning buffer saat ini. Jalankan
M-x clone-indirect-buffer
, atauC-x 4 c
untuk juga membuat jendela baru yang menunjukkan buffer itu. Klon memiliki teks yang sama dengan aslinya, tetapi memiliki tanda dan titik tersendiri.Jika Anda telah membunuh beberapa teks, Anda dapat menambahkan lebih banyak teks dengan mengetikkan
C-M-w
(append-next-kill
) dan kemudian menggunakan perintah kill. Misalnya,C-M-w C-k
tambahkan ekor baris saat ini ke teks yang sudah ada di bagian depan cincin bunuh, dan hapus teks yang disalin.C-M-w M-w
menambahkan seleksi ke teks di bagian depan ring kill (berbeda denganM-w
yang mendorong teks yang dipilih sebagai entri baru pada ring kill).sumber