comandos - ¿Cómo reemplazar una región en emacs con el contenido de la memoria intermedia de extracción?
emacs ubuntu (6)
Cuando uso VIM o la mayoría de los editores no modulares (Eclipse, NetBeans, etc.) hago lo siguiente con frecuencia. Si tengo bloques de texto similares y necesito cambiarlos todos, cambiaré uno, lo copiaré (o usaré el tirón no eliminador), seleccionaré el bloque siguiente que necesito y pegaré la versión modificada sobre él. Si hago lo mismo en emacs (seleccione región y pego con Cy), no reemplaza la región, simplemente pega en la posición del cursor. ¿Cuál es la forma de hacer esto en emacs?
Configurar el delete-selection-mode
, como sugirió Michael, parece ser la forma más natural de hacerlo.
Sin embargo, eso no es lo que hago :) En cambio, puse las cosas buenas en un "registro", por ejemplo, registrar "a", con Cx rxa
. Luego elimino la otra copia y copio el registro en el mismo lugar con Cx rga
.
Esto es conveniente porque matar no afecta los registros, por lo que Cx rga
siempre inserta lo bueno.
La forma en que hago esto es:
- ve a donde quieras las cosas nuevas
- pega las cosas buenas
- su cursor está ahora entre las cosas nuevas y las cosas que quiere deshacerse de
- seleccione reenviar hasta seleccionar todo lo que desea deshacerse
- bórralo
Es una manera ligeramente diferente de pensar sobre eso. Pega lo que quieras, luego deshazte de lo que no quieres, en lugar de reemplazar lo que no quieres con lo que haces.
La forma predeterminada de hacer algo como esto es el siguiente no completamente elegante:
- Obtenga el texto de reemplazo deseado en el anillo de la muerte de alguna manera (por ejemplo, Mw).
- Resalta la región que se reemplazará.
- Eliminarlo (
Cw
). - Reemplácelo con la región copiada anteriormente (
Cy
,My
). Esto reemplaza los contenidos recién eliminados con el mismo texto que acaba de eliminar (Cy
), y luego lo reemplaza con el siguiente búfer guardado más recientemente en el anillo de búfer (My
).
Esto sería un verdadero dolor si quisieras hacer esto 10 veces con el mismo texto, ya que el reemplazo deseado sería empujado más atrás en el anillo de sacrificio cada vez que eliminaras una región, por lo que tendrías que llamar a Mw
aumentando el número de veces cada vez que quería tirar de él.
También descubrí Mx delete-region
, gracias a Emacs: cómo eliminar texto sin kill ring? . Como la pregunta implica, esto borra el texto ofensivo sin ponerlo en el anillo de sacrificio, evitando el problema de empujar el texto de reemplazo más abajo en la pila. Y, como menciona la respuesta relevante, puede vincular esto a una tecla de acceso directo de su elección.
Si habilita el modo CUA, este pegar sobre la región seleccionada se convierte en el comportamiento normal.
Use delete-selection-mode
, para que el texto pegado reemplace la región activa.
Use la selección secundaria para pegar el mismo texto una y otra vez, incluso si selecciona alternativamente una nueva región para reemplazar.
Agregue esto a sus .emacs
:
(delete-selection-mode 1)
Todo lo que escriba en el búfer mientras la región está activa lo sobreescribirá, incluso pegar, pero también simplemente tecleando algo o presionando el retroceso