¿Cuál es la utilidad de `exchange-point-and-mark`?

16

El exchange-point-and-markcomando está obligado C-x C-x, pero no puedo pensar en ningún caso de uso que lo haga merecedor de un enlace tan destacado.

¿Cómo puedo usar el exchange-point-and-markpara mejorar mi técnica de edición?

Matthew Piziak
fuente

Respuestas:

19

Se me ocurren dos casos: reactivar la región y ajustar el tamaño de la región.

La mayoría de las veces uso este enlace para reactivar la región después de ejecutar algún comando que la desactiva, o hacer algo que establece la marca y mueve el punto sin activar la región.

Por ejemplo, haga una C y busque algo hacia adelante. Presione RET para salir de la búsqueda, luego Cx Cx para marcar todo desde donde comenzó la búsqueda.

Otro ejemplo que hago mucho cuando quiero incluir algunos ejemplos de elisp en una respuesta de StackExchange:

  1. Marque el bit de código que quiero copiar.
  2. Presione Cu Cx TAB para sangrar el código en 4 espacios. De esa manera se representará como código aquí en el sitio. Este paso desactiva la región.
  3. Presiona Cx Cx para reactivar la región, luego Mw para copiarlo en el portapapeles para que pueda pegarlo en mi respuesta de StackExchange.

El otro caso es cuando está marcando una región y desea extenderla / reducirla. En ese caso, es conveniente poder saltar al "otro extremo" de la región, moverlo y luego saltar hacia atrás. Si la región ya está activa, entonces presionar Cx Cx la dejará activa, permitiéndole mover cualquier extremo.

glucas
fuente
17

Pregúntale a Emacs: C-h r i exchange-point-and-mark RETo, mejor C-h r i C-x C-x RET,. Esto lo lleva a la información que se muestra a continuación.

Esto es lo que dice el manual de Emacs, Marca de configuración de nodo en respuesta a su pregunta:

C-x C-xes útil cuando está satisfecho con la posición del punto pero desea mover el otro extremo de la región (donde está la marca) . Usando C-x C-xuna segunda vez, si es necesario, coloca la marca en la nueva posición con el punto nuevamente en su posición original. Normalmente, si la marca está inactiva, este comando primero reactiva la marca donde se configuró por última vez, para garantizar que la región quede resaltada. Sin embargo, si lo llama con un argumento prefijo, deja la marca inactiva y la región no resaltada; puede usar esto para saltar a la marca de manera similar a C-u C-<SPC>.

Y esto es lo que dice al respecto en el nodo Disabled Transient Mark :

Al transient-mark-modedesactivar [ ] se cambia Emacs a un modo de operación alternativo:

  • Establecer la marca, con comandos como C-<SPC>o C-x C-x, no resalta la región. Por lo tanto, no puede saber mirando dónde se encuentra la marca; Tienes que recodar.

    La solución habitual a este problema es establecer la marca y luego usarla pronto, antes de olvidar dónde está. También puede verificar dónde está la marca mediante el usoC-x C-x , que intercambia las posiciones del punto y la marca; consulte Configuración de la marca .

Mientras el modo Marca transitoria está desactivado, puede activarlo temporalmente usando C-<SPC> C-<SPC>o C-u C-x C-x.

y:

C-u C-x C-x Intercambie el punto y la marca, active la marca y habilite el modo Marca transitoria temporalmente, hasta que la marca se desactive nuevamente. (Este es el C-x C-xcomando exchange-point-and-mark, con un argumento de prefijo).

Dibujó
fuente
8

Lo uso cuando he perdido una selección debido a alguna operación que la eliminó, y quiero restaurar la selección. Uno de estos escenarios sería:

  1. Seleccionar rectángulo.
  2. Mátalo.
  3. Deshacer matar rectángulo.
  4. C-x C-x para restaurar la selección al rectángulo.

Esto sucede cuando quiero hacer una copia de seguridad ad hoc de un área seleccionada y experimentar con la copia, como, por ejemplo, quiero buscar y reemplazar, pero no puedo pensar en una forma de hacerlo de una manera que no destruya parte del texto que debe permanecer, por lo que luego lo revertiría de la copia.

wvxvw
fuente
8

Las otras respuestas se centran en la utilidad de C-x C-xcuándo transient-mark-modeestá activo. Pero C-x C-xes anterior transient-mark-mode, y es útil independientemente de ello.

El papel principal de C-x C-xes intercambiar puntos y marcar. Esto es útil cuando está editando dos puntos en un único búfer y, por alguna razón, no quiere dividir la ventana actual. Edite, marque, muévase a otro punto en el búfer, edite, C-x C-xedite en el lugar anterior C-x C-x, edite un poco más, hasta la saciedad. (Si no planea volver al segundo punto, C-u C-SPCpuede ser más intuitivo. Busque el anillo de marcas en el manual de Emacs).

Cuando transient-mark-modeestá desactivado, C-x C-xtiene otro propósito importante: le permite averiguar dónde está la región. C-x C-x, vislumbre rápido en el punto, de C-x C-xnuevo.

(Y en caso de que se lo pregunte, sí, algunos de nosotros todavía preferimos usar Emacs con transient-mark-modediscapacidad).

jch
fuente