Seleccionar texto sin mover el cursor

8

Me gustaría hacer crecer una selección sin mover el punto (el cursor) desde su ubicación. Sé que siempre puedo usar C-u C-spcpara moverme a la ubicación anterior, pero me gustaría evitarlo.

Más específicamente, me gustaría hacer ambas operaciones:

  • Seleccione todo el texto en el búfer
  • Agregue gradualmente líneas / párrafos posteriores a la selección

manteniendo el cursor donde está.

¿Emacs tiene alguna función interactiva para esto? ¿Están vinculados a algún atajo de teclado?

Amelio Vazquez-Reina
fuente
Siempre puede volver a la ubicación del punto anterior con C-u C-spc.
Malabarba
1
¿puede decirme, por favor, cuál podría ser el interés de seleccionar texto sin mover el cursor?
Nsukami _

Respuestas:

12

Hay una respuesta separada para cada uno de los puntos que enumeró:

  1. El enlace predeterminado de emacs C-x hseleccionará todo el búfer independientemente de dónde esté el cursor.

  2. El paquete expand-region ayudará a lograr el segundo objetivo de expandir gradualmente la selección. expand-regioneventualmente también seleccionará todo el búfer a medida que continúa expandiendo la región. Eche un vistazo a su archivo Léame en github para obtener más información. Este paquete está disponible a través de MELPA.

Aquí hay una breve introducción a este paquete desde su github:

Expandir región aumenta la región seleccionada por unidades semánticas. Simplemente mantenga presionada la tecla hasta que seleccione lo que desea.

Un ejemplo:

 (setq alphabet-start "abc def") 

Con el cursor en la c, comienza marcando la palabra completa abc, luego se expande al contenido de las comillas abc def, luego a la comilla completa "abc def", luego al contenido del sexp setq alfabeto-inicio "abc def "y finalmente a todo el sexp.

Sin embargo, me gustaría agregar que modificar la selección de región en cualquier caso aún moverá el cursor.

Kaushal Modi
fuente
+1, pero tenga en cuenta que C-x hmueve el cursor: al final del búfer y luego al comienzo del búfer. Necesitas C-u C-spcdos veces para volver a donde estabas.
ShreevatsaR
9

Si la región crece, el cursor cambia de posición. Esto se debe a que el cursor siempre está en un extremo de la región.

Si selecciona todo el texto del búfer ( C-x hy luego lo usa C-x C-xpara intercambiar puntos y marcas, de modo que el cursor esté al final del texto), y luego escribe más texto, entonces ha logrado lo que desea: la región ha sido extendido para incluir el texto que escribió. (Esto supone que no has delete-selection-modeactivado).

La región también se ha desactivado, automáticamente, por lo que el texto de la región ya no está resaltado. Para reactivar la región, haga C-x C-x(lo que puede repetir, si desea mantener el cursor en el extremo del búfer.

Dibujó
fuente
4

Como se mencionó, el expand-regionpaquete es excelente, pero también creo que vale la pena mencionarlo easy-kill. Se factura como un reemplazo de caída para kill-ring-saveque convierte la M-w"copia" normal en un comando de copia dinámica que también actúa como un prefijo para guardar varias cosas. Por ejemplo, M-wcopiaría la región activa, la url, el correo electrónico o la línea actual (en orden de easy-kill-try-things) pero seguido de una "d" M-w d, copiaría con fuerza la defun actual.

También hay un método para expandir / reducir la selección actual, algo expand-regionasí como un comando llamado easy-markpara marcar regiones sin cambiar su punto actual.

waymondo
fuente
1

Cuando haya copiado algo, puede agregar texto a la selección más adelante con el uso de C-M-w:

  • copiar una línea / región
  • hacer algo más
  • desea agregar sthg al texto copiado previamente: escriba C-M-w( append-next-kill) y luego copie lo que desee ( M-w).
Ehvince
fuente
1

Como se indica en otras respuestas:

C-xh seleccionará todo el búfer; (mark-whole-buffer)

Si desea aumentar su selección, la forma más fácil sería usar los mark-*comandos.

Como ejemplo de keybound:

C-M-SPC (mark-sexp)marcará el sexp en el punto. Si repite el comando, agregará el siguiente sexp a la selección. El cursor permanecerá en la posición actual o se moverá al inicio del objeto (párrafo / sexp) para asegurarse de que esté completamente marcado.

Jonathan Leech-Pepin
fuente
Preludio de mapas (mark-whole-buffer)a <kbd> Cmd-a </kbd> en OSX para mantener cierta similitud con la funcionalidad típica de OSX.
Aaron Lee
1

Si está de acuerdo con usar el mouse, puede usar la selección secundaria . Presione Meta, luego haga clic y arrastre el botón izquierdo del mouse ( M-drag-mouse-1). Esto no mueve el punto siempre que solo esté copiando el texto que está visible en la pantalla. Puede copiar la selección secundaria con M-mouse-3y tirar de ella M-mouse-2.

Además de la selección secundaria, deberá mover el cursor para seleccionar texto arbitrario, porque el cursor es un extremo de la selección (el otro es la marca).

Si desea trabajar en un búfer sin afectar el punto, puede abrir el búfer en una segunda ventana ( C-x 2oC-x 3 ). Cada ventana tiene su propio punto. Cuando haya terminado de seleccionar y editar, cierre la ventana ( C-x 0) y vuelva a la otra.

Para mayor flexibilidad, puede clonar el búfer actual. Ejecutar M-x clone-indirect-buffer, o C-x 4 ctambién para crear una nueva ventana que muestre ese búfer. El clon tiene el mismo texto que el original, pero tiene su propia marca y punto.

Si ya eliminó algún texto, puede agregar más texto escribiendo C-M-w( append-next-kill) y luego usando un comando kill. Por ejemplo, C-M-w C-kagrega la cola de la línea actual al texto que ya está en la parte delantera del anillo de eliminación y elimina el texto copiado. C-M-w M-wagrega la selección al texto en la parte frontal del anillo de cierre (en oposición a lo M-wque empuja el texto seleccionado como una nueva entrada en el anillo de cierre).

Gilles 'SO- deja de ser malvado'
fuente