¿Cómo seleccionar o resaltar un bloque en Emacs?


Respuestas:


66

Eche un vistazo a region-rectangle en emacs.

En resumen, comienza la selección como de costumbre con Control- Space, luego mata la región con Control- x r ky pega (o tira ) el bloque eliminado con Control- x r y.


11
Eso no mata regiones, mata rectángulos, que es muy diferente de lo que hace el modo visual de vim, en mi experiencia.
Allen

2
¿Cómo es diferente?
Ken Williams

73

Si entiendo la pregunta correctamente, originalmente no se trata de regiones rectangulares.

C-Spc pone una marca en la posición actual.

Donde sea que esté el cursor después, el texto entre la última marca y la posición actual está "seleccionado" (puede resaltar esto activando transient-mark-mode, pero esto también significará que las marcas deben eliminarse cuando no desee resaltar).

Puede operar en esa región con comandos como:

C-w. . Mata a la región. Esto elimina y pone la región en el círculo de la muerte.
C-y. . Tirón. Esto inserta el último fragmento del anillo de muerte.
M-y. . Anillo de muerte de ciclo. Inmediatamente después C-y, esto reemplaza la parte arrancada por los otros fragmentos en el anillo de muerte.
M-w. . Guarde la región en el anillo de muerte. Me gusta C-w, pero no elimina.

Este es solo el uso básico. Las marcas también tienen otros usos. Recomiendo el tutorial ( C-h t).


6
Vale la pena señalar que C-s C-rse utilizan comúnmente en este contexto para ir a buscar el final / inicio de la región. (Especialmente útil en una macro.)
ocodo

Bueno, son muy buenos comandos, pero ... ¿Cómo seleccionar la región marcada? Después de todo, todavía lo necesito, es decir, para sangrar el código entre marcas.
Hi-Angel

La región entre la última marca y el punto actual (que es donde está el cursor) es la región seleccionada. Solo corre M-x indent-region.
Svante

@Svante No, no está seleccionado. Aunque el indent-regionfunciona bien, pero el c-indent-line-or-region(el que está vinculado a la tecla de tabulación ) no lo es. La última función no funciona en las regiones marcadas , sino en las seleccionadas , es decir, la región que está resaltada como si la hubiera seleccionado con el mouse.
Hi-Angel

2
@YagamyLight Ah, puedes hacer eso golpeando C-Spcdos veces donde pusiste la marca. Eso activa el modo transient-mark-mode temporalmente (hasta que cancele (con C-g)). Luego mueva el punto para ver aparecer la región seleccionada.
Svante



10

Aunque C-SPCes una forma común de comenzar a marcar algo desde donde sea que esté su punto, a menudo hay formas más rápidas / fáciles que no implican moverse explícitamente a los puntos de inicio / finalización ...

Atajos de selección incorporados

  • M-h- un medio importante para marcar un párrafo . Un "párrafo" a menudo significa un bloque de código.

  • C-M-hy C-M-@- para marcar sexps y defuns , respectivamente. Esto funciona para varios idiomas, no solo ceceo.

  • Mantenga presionada la tecla Mayús , otra forma elegante de resaltar durante el movimiento. Por ejemplo, M-S-fselecciona reenviar una palabra completa. Esto es shift-select-mode, y está habilitado por defecto en Emacs 24+. En algunos teclados (que no son chiclet), debería poder mantener presionado C-S-con un solo meñique.

Puede presionar cualquiera de estos repetidamente para aumentar la selección.

(NOTA: utilícelo con C-gfrecuencia para cancelar el marcado mientras experimenta).

Complementos

Hay algunos paquetes de complementos que mejoran la selección de regiones y cosas. Todos se combinan muy bien y se adaptan a diferentes casos de uso. ¡Úsalos todos!

  • Expandir región : Expandir región aumenta la región seleccionada en unidades semánticas. Simplemente siga presionando la tecla hasta que seleccione lo que desea. C-=es un enlace recomendado para ello. Golpéelo varias veces para obtener lo que necesita.

  • Easy-Kill : useM-wy un mnemotécnico para seleccionar diferentes tipos de cosas, como palabras, sexps, listas, etc.

  • Zop-to-Char : como zap-to-char , pero proporciona una buena selección y otras acciones basadas en menús.

  • diff-hl : resalta las regiones modificadas no confirmadas. Utilicediff-hl-mark-hunkpara seleccionar / marcar un trozo.


7

Utilice Control- Spacepara establecer una marca y mover el cursor.

El transient-mark-moderesaltará las selecciones para usted. M- x transient-mark-mode.

Puede configurar Emacs para habilitar este modo por defecto usando una personalización. M- x customize-option RET transient-mark-mode.


1

... y en caso de que esté utilizando Ubuntu y C-spcno funcione para usted: debe borrar la combinación de teclas del "siguiente método de entrada" de IBus, como en

ejecute ibus-setupy cambie el enlace de teclas para el "siguiente método de entrada" a otra cosa (o elimínelo por completo haciendo clic en el botón "..." y luego en el botón "Eliminar").

Cita extraída de la respuesta a una pregunta SO.


0

Para expandir la respuesta de Edin Salkovic, si usa el modo CUA, puede usar para comenzar una selección de bloque visual. Hay muchos atajos para controlar la selección de bloques descritos en la documentación de CUA .


-1

Con Emacs 25, simplemente presione C- Spacey luego mueva el cursor donde desee resaltar / seleccionar la región de texto que le interese. Después de eso, es posible que necesite estos comandos:

  • C- wpara cortar.
  • M- wpara copiar.
  • C- ypara pegar.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.