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-spc
para 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?
C-u C-spc
.Respuestas:
Hay una respuesta separada para cada uno de los puntos que enumeró:
El enlace predeterminado de emacs C-x hseleccionará todo el búfer independientemente de dónde esté el cursor.
El paquete expand-region ayudará a lograr el segundo objetivo de expandir gradualmente la selección.
expand-region
eventualmente 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:
Sin embargo, me gustaría agregar que modificar la selección de región en cualquier caso aún moverá el cursor.
fuente
C-x h
mueve el cursor: al final del búfer y luego al comienzo del búfer. NecesitasC-u C-spc
dos veces para volver a donde estabas.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 h
y luego lo usaC-x C-x
para 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 hasdelete-selection-mode
activado).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.fuente
Como se mencionó, el
expand-region
paquete es excelente, pero también creo que vale la pena mencionarloeasy-kill
. Se factura como un reemplazo de caída parakill-ring-save
que convierte laM-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-w
copiaría la región activa, la url, el correo electrónico o la línea actual (en orden deeasy-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-region
así como un comando llamadoeasy-mark
para marcar regiones sin cambiar su punto actual.fuente
Cuando haya copiado algo, puede agregar texto a la selección más adelante con el uso de
C-M-w
:C-M-w
(append-next-kill
) y luego copie lo que desee (M-w
).fuente
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.fuente
(mark-whole-buffer)
a <kbd> Cmd-a </kbd> en OSX para mantener cierta similitud con la funcionalidad típica de OSX.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 conM-mouse-3
y tirar de ellaM-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 2
oC-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
, oC-x 4 c
tambié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-k
agrega 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-w
agrega la selección al texto en la parte frontal del anillo de cierre (en oposición a loM-w
que empuja el texto seleccionado como una nueva entrada en el anillo de cierre).fuente