Apa kegunaan dari `exchange-point-and-mark`?

16

The exchange-point-and-markperintah terikat untuk C-x C-x, tapi aku tidak bisa memikirkan kasus penggunaan yang akan membuatnya layak dari terkemuka seperti mengikat.

Bagaimana saya bisa menggunakan exchange-point-and-markuntuk meningkatkan teknik pengeditan saya?

Matthew Piziak
sumber

Jawaban:

19

Ada dua kasus yang dapat saya pikirkan: mengaktifkan kembali wilayah tersebut, dan menyesuaikan ukuran wilayah tersebut.

Saya paling sering menggunakan pengikatan ini untuk mengaktifkan kembali wilayah setelah melakukan beberapa perintah yang menonaktifkannya, atau melakukan sesuatu yang menetapkan tanda dan memindahkan titik tanpa mengaktifkan wilayah.

Misalnya, lakukan Cs dan cari sesuatu. Tekan RET untuk keluar dari pencarian, lalu Cx Cx untuk menandai semuanya dari tempat Anda memulai pencarian.

Contoh lain yang saya lakukan banyak ketika saya ingin memasukkan beberapa sampel elisp dalam jawaban StackExchange:

  1. Tandai sedikit kode yang ingin saya salin.
  2. Tekan Cu Cx TAB untuk membuat indentasi kode sebanyak 4 spasi. Dengan begitu akan diterjemahkan sebagai kode di sini di situs. Langkah ini menonaktifkan wilayah.
  3. Tekan Cx Cx untuk mengaktifkan kembali wilayah tersebut, lalu Mw untuk menyalinnya ke clipboard sehingga saya bisa menempelkannya di jawaban StackExchange saya.

Kasus lainnya adalah ketika Anda menandai suatu wilayah dan ingin memperluas / mengecilkannya. Dalam hal ini nyaman untuk dapat melompat ke "ujung lain" wilayah itu, memindahkannya, lalu melompat kembali. Jika wilayah sudah aktif maka memukul Cx Cx akan membiarkannya aktif, memungkinkan Anda untuk memindahkan kedua ujungnya.

glukas
sumber
17

Tanyakan Emacs: C-h r i exchange-point-and-mark RETatau, lebih baik C-h r i C-x C-x RET,. Ini membawa Anda ke informasi yang ditunjukkan di bawah ini.

Ini adalah apa yang dikatakan oleh manual Emacs, Markus Pengaturan simpul dalam menjawab pertanyaan Anda:

C-x C-xberguna ketika Anda puas dengan posisi titik tetapi ingin memindahkan ujung wilayah lainnya (di mana tandanya berada) . Menggunakan C-x C-xkedua kalinya, jika perlu, meletakkan tanda di posisi baru dengan menunjuk kembali ke posisi semula. Biasanya, jika tanda tidak aktif, perintah ini pertama-tama mengaktifkan kembali tanda di mana pun itu terakhir ditetapkan, untuk memastikan bahwa wilayah dibiarkan disorot. Namun, jika Anda menyebutnya dengan argumen awalan, itu meninggalkan tanda tidak aktif dan wilayah tidak disorot; Anda dapat menggunakan ini untuk melompat ke tanda dengan cara yang mirip dengan C-u C-<SPC>.

Dan inilah yang dikatakannya dalam node Disabled Transient Mark :

Mematikan [ transient-mark-mode] menonaktifkan Emacs ke mode operasi alternatif:

  • Mengatur tanda, dengan perintah seperti C-<SPC>atau C-x C-x, tidak menyorot wilayah tersebut. Oleh karena itu, Anda tidak dapat mengetahui dengan melihat di mana tanda itu berada; kamu harus ingat.

    Solusi yang biasa untuk masalah ini adalah dengan menetapkan tanda dan kemudian menggunakannya segera, sebelum Anda lupa di mana itu. Anda juga dapat memeriksa di mana tanda itu menggunakanC-x C-x , yang menukar posisi titik dan tanda - lihat Menandai Tanda .

Saat mode Tanda Transien mati, Anda dapat mengaktifkannya sementara menggunakan C-<SPC> C-<SPC>atau C-u C-x C-x.

dan:

C-u C-x C-x Pertukaran titik dan tandai, aktifkan tandai dan aktifkan mode Tanda Transien untuk sementara, sampai tanda selanjutnya dinonaktifkan. (Ini adalah C-x C-xperintah exchange-point-and-mark,, dengan argumen awalan.)

Drew
sumber
8

Saya menggunakan ini ketika saya kehilangan pilihan karena beberapa operasi yang menghapusnya, dan saya ingin mengembalikan pilihan. Satu skenario seperti itu adalah:

  1. Pilih persegi panjang.
  2. Bunuh itu.
  3. Membatalkan pembunuhan segi empat.
  4. C-x C-x untuk mengembalikan seleksi ke persegi panjang.

Ini terjadi ketika saya ingin membuat cadangan ad hoc dari area yang dipilih dan untuk bereksperimen pada salinan, seperti, misalnya, saya ingin membuat beberapa menemukan-dan-mengganti, tetapi saya tidak bisa memikirkan cara untuk melakukan dengan cara yang tidak menghancurkan beberapa teks yang dimaksudkan untuk tetap, jadi saya nanti akan mengembalikannya dari salinan.

wvxvw
sumber
8

Jawaban lain fokus pada kegunaan C-x C-xkapan transient-mark-modeaktif. Tetapi C-x C-xmendahului transient-mark-mode, dan berguna secara independen.

Peran utama C-x C-xadalah untuk menukar titik dan tanda. Ini berguna ketika Anda mengedit dua titik dalam satu buffer dan karena alasan tertentu tidak ingin membagi jendela saat ini. Lakukan pengeditan, setel tanda, pindahkan ke titik lain di buffer, lakukan beberapa pengeditan C-x C-x,, lakukan beberapa pengeditan di tempat sebelumnya C-x C-x,, lakukan beberapa pengeditan lagi, ad mual. (Jika Anda tidak berencana untuk kembali ke poin kedua, C-u C-SPCmungkin lebih intuitif. Carilah cincin tanda di manual Emacs.)

Ketika transient-mark-modedinonaktifkan, C-x C-xada tujuan penting lain: ini memungkinkan Anda untuk mencari tahu di mana wilayah itu. C-x C-x, sekilas pada titik, C-x C-xlagi.

(Dan jika Anda bertanya-tanya - ya, sebagian dari kita masih lebih suka menggunakan Emacs dengan transient-mark-modedinonaktifkan.)

jch
sumber