Este artículo dice que "Emacs ha rehacido porque puede revertir la dirección mientras deshace, deshaciendo así la deshacer".
¿Qué significa esto? ¿Cómo puede un usuario 'rehacer' con Emacs?
Este artículo dice que "Emacs ha rehacido porque puede revertir la dirección mientras deshace, deshaciendo así la deshacer".
¿Qué significa esto? ¿Cómo puede un usuario 'rehacer' con Emacs?
Respuestas:
Versión corta: deshaciendo el deshacer. Si deshace y luego hace un comando de no edición como C-f, entonces el siguiente deshacer deshacerá el deshacer, lo que dará como resultado un rehacer.
Versión más larga:
Puede pensar en deshacer como operando en una pila de operaciones. Si realiza algún comando (incluso un comando de navegación como C-f) después de una secuencia de operaciones de deshacer, todas las operaciones de deshacer se envían a la pila de operaciones. Entonces, el siguiente deshacer deshace el último comando. Supongamos que tiene una secuencia de operación que se ve así:
Ahora te deshaces. Deshace la última acción, dando como resultado la siguiente lista:
Si hace algo diferente a deshacer en este punto, por ejemplo C-f, la pila de operaciones se ve así:
Ahora, cuando deshaces, lo primero que se deshace es deshacer. Resultando en su pila original (y estado del documento):
Si realiza un comando de modificación para romper la secuencia de deshacer, ese comando se agrega después de deshacer y, por lo tanto, es lo primero que se deshace después. Suponga que retrocede sobre "barra" en lugar de golpear C-f. Entonces hubieras tenido
Esta adición / re-adición ocurre hasta el infinito. Cuesta un poco acostumbrarse, pero realmente le da a Emacs un mecanismo de deshacer / rehacer altamente flexible y poderoso.
Deshacer: C-_
Para rehacer después de deshacer: C-g C-_
Escriba varias veces C-_ para rehacer lo que se ha deshecho C-_ Para rehacer un comando de emacs varias veces, ejecute su comando y luego escriba C-xzy luego escriba muchas veces en la ztecla para repetir el comando (interesante cuando desea ejecutar varias veces una macro)
C-u
, por ejemplo C-u 8 *
(inserta ocho * donde está el cursor). Entonces puedes usar C-u x C-_
para deshacer x pasos.
C-x e
), puede presionar e
tantas veces como sea necesario para ejecutarla nuevamente.
C-/
y C-x u
son combinaciones de teclas de deshacer alternativas, equivalentes a C-_
. Prefiero C-/
ya que es más fácil golpear.
C-g C-_
"rehacerá después de deshacer", eso solo se aplica la primera vez que golpeas la combinación. Después de eso, repita su clave de deshacer sin C-g
. Entonces, para rehacer tres veces justo después de deshacer, escriba C-g C-_ C-_ C-_
. Si escribe C-g C-_ C-g C-_ C-g C-_
, simplemente irá dando vueltas, deshaciendo su rehacer de su deshacer ...
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. Tenga en cuenta que C-g
no se repite.C-g
C-/
C-g
C-/
C-/
Si ha presionado alguna tecla (ya sea escribiendo caracteres o simplemente moviendo el cursor) desde su último comando de deshacer, no hay necesidad de escribir C-g
antes de su próximo deshacer / rehacer. C-g
es solo una tecla segura para golpear que no hace nada por sí misma, sino que cuenta como una tecla de no deshacer para indicar el final de su secuencia de deshacer. Presionando otro comando tal como C-f
funcionaría también; es solo que movería el cursor desde donde lo tenía.
Si golpeas C-g
u otro comando cuando no querías hacerlo, y ahora estás deshaciendo en la dirección incorrecta, simplemente golpea C-g
para invertir tu dirección nuevamente. Tendrá que deshacer todo el proceso de rehacer y deshacer accidentalmente antes de llegar a lo que desea deshacer, pero si sigue presionando C-/
, eventualmente alcanzará el estado que desea. De hecho, cada estado en el que el buffer ha estado es accesible, si presiona C-g
una vez y luego presionaC-/
suficientes veces.
Atajos alternativos para undo
, excepto C-/
, son C-_
, C-x u
yM-x
undo
.
Vea Deshacer en el Manual de Emacs para más detalles sobre el sistema de deshacer de Emacs.
Para aquellos que desean tener la funcionalidad de deshacer / rehacer más común, alguien ha escrito undo-tree.el
. Proporciona la apariencia de deshacer sin Emacs, pero proporciona acceso a todo el 'árbol' del historial de deshacer.
Me gusta el sistema de deshacer incorporado de Emacs, pero este paquete me parece muy intuitivo.
Aquí está el comentario del archivo en sí:
Emacs tiene un poderoso sistema de deshacer. A diferencia del sistema estándar de deshacer / rehacer en la mayoría de los programas, le permite recuperar cualquier estado pasado de un búfer (mientras que el sistema de deshacer / rehacer estándar puede perder estados pasados tan pronto como lo rehace). Sin embargo, este poder tiene un precio: muchas personas encuentran que el sistema de deshacer de Emacs es confuso y difícil de usar, generando una serie de paquetes que lo reemplazan con el sistema de deshacer / rehacer menos potente pero más intuitivo.
Tanto la pérdida de datos con deshacer / rehacer estándar, como la confusión de deshacer de Emacs, se derivan de tratar de tratar el historial de deshacer como una secuencia lineal de cambios. No es. El 'modo de árbol de deshacer' proporcionado por este paquete reemplaza el sistema de deshacer de Emacs con un sistema que trata el historial de deshacer como lo que es: un árbol de cambios ramificado. Esta idea simple permite que el comportamiento más intuitivo del sistema estándar de deshacer / rehacer se combine con el poder de nunca perder ningún historial. Una ventaja adicional es que el historial de deshacer puede almacenarse en algunos casos de manera más eficiente, permitiendo que se acumulen más cambios antes de que Emacs comience a descartar el historial.
¡Cuidado con un capricho de deshacer árbol para rehacer !
Muchos populares "kits de inicio" (preludio, purcell, spacemacs) vienen con undo-tree. La mayoría (¿todo?) Incluso lo habilita automáticamente. Como se mencionó, undo-tree es una forma práctica de visualizar y recorrer el árbol de deshacer / rehacer. Preludio incluso le da un acorde clave ( uu
), y también C-x u
.
El problema es: deshacer-árbol parece destruir por defecto de Emacs y conocido vinculante para rehacer :C-g C-/
.
En su lugar, puede usar estas teclas simétricas para deshacer / rehacer :
C-/ undo
C-S-/ redo
Estos son útiles ya que a veces desea rehacer rápidamente sin abrir el visualizador.
Me resulta redo.el
extremadamente útil para hacer / deshacer "normal", y generalmente lo asocio a CSz y deshago a Cz, así:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
Simplemente descargue el archivo, póngalo en su ruta de lisp y pegue lo anterior en su .emacs
.
Por defecto, rehacer en Emacs requiere presionar Cg, luego deshacer.
Sin embargo, es posible usar el deshacer incorporado de Emacs para implementar un comando rehacer también.
El paquete undo-fu , utiliza la funcionalidad de deshacer incorporada de Emacs para exponer tanto deshacer como rehacer.