Qual è l'utilità di `exchange-point-and-mark`?


16

Il exchange-point-and-markcomando è vincolato C-x C-x, ma non riesco a pensare a nessun caso d'uso che lo renderebbe meritevole di un legame così importante.

Come posso usare il exchange-point-and-markper migliorare la mia tecnica di modifica?

Risposte:


19

Ci sono due casi a cui riesco a pensare: riattivare la regione e regolare le dimensioni della regione.

Uso molto spesso questa associazione per riattivare la regione dopo aver eseguito un comando che la disattiva o facendo qualcosa che imposta il segno e sposta il punto senza attivare la regione.

Ad esempio, esegui un Cs e cerca in avanti qualcosa. Premi RET per uscire dalla ricerca, quindi Cx Cx per contrassegnare tutto da dove hai iniziato la ricerca.

Un altro esempio che faccio molto quando voglio includere alcuni esempi di elisp in una risposta StackExchange:

  1. Segna il bit di codice che voglio copiare.
  2. Premi Cu Cx TAB per indentare il codice di 4 spazi. In questo modo verrà visualizzato come codice qui sul sito. Questo passaggio disattiva la regione.
  3. Premi Cx Cx per riattivare la regione, quindi Mw per copiarlo negli Appunti in modo da poterlo incollare nella mia risposta StackExchange.

L'altro caso è quando si sta contrassegnando una regione e si desidera estenderla / ridurla. In tal caso è conveniente essere in grado di saltare all '"altra estremità" della regione, spostarla, quindi tornare indietro. Se la regione è già attiva, premere Cx Cx la lascerà attiva, permettendoti di muovere entrambe le estremità.


17

Chiedi Emacs: C-h r i exchange-point-and-mark RETo, meglio, C-h r i C-x C-x RET. Questo ti porta alle informazioni mostrate di seguito.

Questo è ciò che dice il manuale di Emacs, Mark Setting Mark in risposta alla tua domanda:

C-x C-xè utile quando si è soddisfatti della posizione del punto ma si desidera spostare l'altra estremità della regione (dove si trova il segno) . L'utilizzo di C-x C-xuna seconda volta, se necessario, riporta il segno nella nuova posizione con il punto nella posizione originale. Normalmente, se il segno è inattivo, questo comando prima riattiva il punto in cui è stato impostato l'ultima volta, per garantire che l'area venga lasciata evidenziata. Tuttavia, se lo chiami con un argomento prefisso, lascia il segno inattivo e la regione non illuminata; puoi usarlo per saltare al segno in un modo simile a C-u C-<SPC>.

E questo è ciò che dice al riguardo nel nodo Contrassegno transitorio disabilitato :

La transient-mark-modedisattivazione di [ ] commuta Emacs su una modalità operativa alternativa:

  • L'impostazione del segno, con comandi come C-<SPC>o C-x C-x, non evidenzia la regione. Pertanto, non si può dire guardando dove si trova il segno; devi ricordare.

    La solita soluzione a questo problema è impostare il segno e utilizzarlo presto, prima di dimenticare dove si trova. Puoi anche controllare dove si trova il segno usandoC-x C-x , che scambia le posizioni del punto e del segno - vedi Impostazione del segno .

Mentre la modalità contrassegno transitorio è disattivata, è possibile attivarla temporaneamente utilizzando C-<SPC> C-<SPC>o C-u C-x C-x.

e:

C-u C-x C-x Scambia punto e contrassegno, attiva il contrassegno e abilita temporaneamente la modalità Contrassegno transitorio, fino alla successiva disattivazione del contrassegno. (Questo è il C-x C-xcomando exchange-point-and-mark, con un argomento prefisso.)


8

Lo uso quando ho perso una selezione a causa di un'operazione che l'ha rimossa e voglio ripristinare la selezione. Uno di questi scenari sarebbe:

  1. Seleziona rettangolo.
  2. Uccidilo.
  3. Annulla uccidere rettangolo.
  4. C-x C-x per ripristinare la selezione in rettangolo.

Questo succede quando voglio fare un backup ad hoc di un'area selezionata e sperimentare sulla copia, come, ad esempio, voglio fare un po 'di ricerca e sostituzione, ma non riesco a pensare a un modo per fare in un modo che non distrugge del testo che dovrebbe rimanere, quindi in seguito lo annullerei dalla copia.


8

Le altre risposte si concentrano sull'utilità di C-x C-xquando transient-mark-modeè attivo. Ma C-x C-xprecede transient-mark-modeed è utile indipendentemente da esso.

Il ruolo principale di C-x C-xè scambiare punto e segno. Ciò è utile quando si modificano due punti in un singolo buffer e per qualche motivo non si desidera dividere la finestra corrente. Effettua alcune modifiche, imposta il segno, sposta in un altro punto del buffer, esegui alcune modifiche C-x C-x, esegui alcune modifiche nella posizione precedente C-x C-x, esegui altre modifiche, fino alla nausea. (Se non hai intenzione di tornare al secondo punto, C-u C-SPCpotrebbe essere più intuitivo. Cerca l' anello di marcatura nel manuale di Emacs.)

Quando transient-mark-modeè disabilitato, C-x C-xha un altro scopo importante: ti permette di scoprire dove si trova la regione. C-x C-x, rapida occhiata al punto, di C-x C-xnuovo.

(E nel caso ti stia chiedendo - sì, alcuni di noi preferiscono ancora usare Emacs con transient-mark-modedisabilitato.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.