Este artigo diz que "o Emacs refez porque você pode reverter a direção ao desfazer, desfazendo o desfazer".
O que isto significa? Como um usuário pode "refazer" o Emacs?
Este artigo diz que "o Emacs refez porque você pode reverter a direção ao desfazer, desfazendo o desfazer".
O que isto significa? Como um usuário pode "refazer" o Emacs?
Respostas:
Versão curta: desfazendo o desfazer. Se você desfazer e executar um comando de não edição, como C-f, o próximo desfazer desfará o desfazer, resultando em um refazer.
Versão mais longa:
Você pode desfazer como operar em uma pilha de operações. Se você executar algum comando (mesmo um comando de navegação como C-f) após uma sequência de operações de desfazer, todas as ações serão enviadas para a pilha de operações. Portanto, o próximo desfazer desfaz o último comando. Suponha que você tenha uma sequência de operações assim:
Agora, você desfaz. Desfaz a última ação, resultando na seguinte lista:
Se você fizer algo diferente de desfazer neste momento - por exemplo C-f, a pilha de operações será assim:
Agora, quando você desfaz, a primeira coisa que é desfeita é a desfazer. Resultando em sua pilha original (e estado do documento):
Se você executar um comando de modificação para interromper a sequência de desfazer, esse comando será adicionado após a desfazer e, portanto, será a primeira coisa a ser desfeita posteriormente. Suponha que você salte sobre a "barra" em vez de bater C-f. Então você teria
Essa adição / re-adição acontece ad infinitum. Demora um pouco para se acostumar, mas realmente dá ao Emacs um mecanismo de desfazer / refazer altamente flexível e poderoso.
Desfazer: C-_
Para refazer depois de desfazer: C-g C-_
Digite várias vezes C-_ para refazer o que foi desfeito C-_ Para refazer um comando do emacs várias vezes, execute seu comando, digite C-xze digite várias vezes na ztecla para repetir o comando (interessante quando você deseja executar várias vezes uma macro)
C-u
, por exemplo C-u 8 *
(insere oito * onde está o cursor). Então você pode usar C-u x C-_
para desfazer x etapas.
C-x e
), basta pressionar e
quantas vezes for necessário para executá-la novamente.
C-/
e C-x u
são alternativas para desfazer ligações de teclas, equivalentes a C-_
. Eu prefiro, C-/
pois é mais fácil de acertar.
C-g C-_
"refazerá depois de desfazer", isso se aplica somente na primeira vez que você clicar na combinação. Depois disso, repita a tecla Desfazer sem C-g
. Então, para refazer três vezes logo após desfazer, digite C-g C-_ C-_ C-_
. Se você digitar C-g C-_ C-g C-_ C-g C-_
, você só vai andar em círculos, desfazendo seu redo do seu desfazer ...
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. Observe que C-g
não é repetido.C-g
C-/
C-g
C-/
C-/
Se você pressionou alguma tecla (digitando caracteres ou apenas movendo o cursor) desde o último comando de desfazer, não é necessário digitar C-g
antes do próximo desfazer / refazer. C-g
é apenas uma chave segura a ser atingida que não faz nada por si só, mas conta como uma chave que não desfaz para sinalizar o fim de sua sequência de desfazer. Pressionar outro comando como C-f
também funcionaria; é só que ele moveria o cursor de onde você o tinha.
Se você pressionar C-g
ou outro comando quando não pretendia, e agora estiver desfazendo na direção errada, basta pressionar C-g
para inverter sua direção novamente. Você terá que desfazer todo o caminho através de refazer e desfazer acidentalmente antes de conseguir desfazer o que deseja, mas, se continuar batendo C-/
, acabará atingindo o estado desejado. De fato, todos os estados em que o buffer já esteve estão acessíveis, se você pressionar C-g
uma vez e pressionar o C-/
suficiente.
Atalhos alternativos para undo
, diferentes C-/
, são C-_
, C-x u
, e M-x
undo
.
Consulte Desfazer no manual do Emacs para obter mais detalhes sobre o sistema de desfazer do Emacs.
Para aqueles que desejam ter a funcionalidade mais comum de desfazer / refazer, alguém escreveu undo-tree.el
. Ele fornece a aparência de desfazer não-Emacs, mas fornece acesso a toda a "árvore" do histórico de desfazer.
Gosto do sistema de desfazer interno do Emacs, mas acho este pacote muito intuitivo.
Aqui está o comentário do próprio arquivo:
O Emacs possui um poderoso sistema de desfazer. Ao contrário do sistema padrão de desfazer / refazer na maioria dos softwares, ele permite recuperar qualquer estado passado de um buffer (enquanto o sistema padrão de desfazer / refazer pode perder estados passados assim que você refaz). No entanto, esse poder tem um preço: muitas pessoas acham o sistema de desfazer do Emacs confuso e difícil de usar, gerando vários pacotes que o substituem pelo sistema de desfazer / refazer menos poderoso, mas mais intuitivo.
Tanto a perda de dados com o desfazer / refazer padrão quanto a confusão do desfazer do Emacs decorrem da tentativa de tratar o desfazer histórico como uma sequência linear de alterações. Não é. O `desfazer-modo de árvore 'fornecido por este pacote substitui o sistema de desfazer do Emacs por um sistema que trata de desfazer o histórico como ele é: uma árvore de mudanças de ramificação. Essa idéia simples permite que o comportamento mais intuitivo do sistema de desfazer / refazer padrão seja combinado com o poder de nunca perder nenhum histórico. Um bônus adicional adicional é que, em alguns casos, o desfazer histórico pode ser armazenado com mais eficiência, permitindo que mais alterações sejam acumuladas antes que o Emacs comece a descartar o histórico.
Cuidado com uma manobra de desfazer árvore para refazer !
Muitos "kits iniciais" populares (prelude, purcell, spacemacs) vêm com desfazer a árvore. A maioria (todos?) Até a habilita automaticamente. Como mencionado, desfazer a árvore é uma maneira útil de visualizar e percorrer a árvore de desfazer / refazer. O prelúdio até fornece um acorde-chave ( uu
) e também C-x u
.
O problema é: desfazer-árvore parece destruir padrão Emacs' e bem conhecido vinculativo para refazer :C-g C-/
.
Em vez disso, você pode usar estas chaves simétricas para desfazer / refazer :
C-/ undo
C-S-/ redo
Isso é útil, pois às vezes você deseja refazer rapidamente sem abrir o visualizador.
Acho redo.el
extremamente útil para desfazer / refazer "normal" e costumo associá-lo ao CSz e desfazer ao Cz, assim:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
Basta baixar o arquivo, colocá-lo no seu caminho lisp e colar o acima no seu .emacs
.
O Emacs 28 adiciona um comando refazer (chamado undo-redo
).
Se você deseja desfazer / refazer mais típico, os seguintes comandos podem ser usados.
(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)
Por padrão, refazer no Emacs requer pressionar Cg e desfazer.
No entanto, é possível usar o desfazer interno do Emacs para implementar também um comando refazer.
O pacote desfazer-fu , usa a funcionalidade de desfazer interna do Emacs para expor desfazer e refazer.