Questo articolo afferma che "Emacs ha ripetuto perché è possibile invertire la direzione durante l'annullamento, annullando così l'annullamento".
Cosa significa questo? Come può un utente "ripetere" con Emacs?
Questo articolo afferma che "Emacs ha ripetuto perché è possibile invertire la direzione durante l'annullamento, annullando così l'annullamento".
Cosa significa questo? Come può un utente "ripetere" con Emacs?
Risposte:
Versione breve: annullando l'annullamento. Se si annulla e si esegue un comando non di modifica come C-f, quindi l'annullamento successivo annulla l'annullamento, con conseguente ripetizione.
Versione più lunga:
Puoi pensare di annullare come operando su una pila di operazioni. Se si esegue un comando (anche un comando di navigazione come C-f) dopo una sequenza di operazioni di annullamento, tutti gli annullamenti vengono inseriti nello stack delle operazioni. Quindi il prossimo annullamento annulla l'ultimo comando. Supponiamo di avere una sequenza di operazioni simile a questa:
Ora annulli. Annulla l'ultima azione, risultante nel seguente elenco:
Se a questo punto fai qualcosa di diverso dall'annullamento, ad esempio C-f, lo stack di operazioni è simile al seguente:
Ora, quando annulli, la prima cosa che viene annullata è l'annullamento. Risultato nella pila originale (e nello stato del documento):
Se si esegue un comando di modifica per interrompere la sequenza di annullamento, tale comando viene aggiunto dopo l'annullamento ed è quindi la prima cosa da annullare successivamente. Supponiamo che tu abbia spostato indietro la "barra" invece di colpire C-f. Quindi avresti avuto
Questa aggiunta / nuova aggiunta avviene all'infinito. Ci vuole un po 'per abituarsi, ma dà davvero a Emacs un meccanismo di annullamento / ripetizione altamente flessibile e potente.
Per annullare: C-_
Per ripetere dopo un annullamento: C-g C-_
Digita più volte C-_ per ripetere ciò che è stato annullato C-_ Per ripetere un comando emacs più volte, esegui il comando quindi digita C-xze quindi digita più volte sul ztasto per ripetere il comando (interessante quando vuoi eseguire più volte una macro)
C-u
, per esempio C-u 8 *
(inserisce otto * dove si trova il cursore). Quindi puoi usare C-u x C-_
per annullare x passaggi.
C-x e
), puoi semplicemente premere tutte e
le volte che devi eseguirla di nuovo.
C-/
e C-x u
sono combinazioni di tasti Annulla alternativi, equivalenti a C-_
. Preferisco C-/
poiché è più facile colpire.
C-g C-_
verrà "ripetuto dopo un annullamento", questo si applica solo la prima volta che si preme la combinazione. Successivamente, ripeti il tasto Annulla senza C-g
. Quindi, per ripetere tre volte subito dopo l'annullamento, digitare C-g C-_ C-_ C-_
. Se digiti C-g C-_ C-g C-_ C-g C-_
, ti limiterai a girare in tondo, annullando la ripetizione del tuo annullamento ...
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. Si noti che C-g
non si ripete.C-g
C-/
C-g
C-/
C-/
Se hai premuto un tasto (sia digitando caratteri che spostando il cursore) dall'ultimo comando di annullamento, non è necessario digitare C-g
prima del prossimo annullamento / ripetizione. C-g
è solo un tasto sicuro da premere che non fa nulla da solo, ma conta come un tasto di non annullamento per segnalare la fine della sequenza di annullamento. Premendo un altro comando come C-f
potrebbe funzionare anche; è solo che avrebbe spostato il cursore da dove lo avevi.
Se premi C-g
o un altro comando quando non volevi, e ora stai annullando nella direzione sbagliata, premi semplicemente C-g
per invertire nuovamente la direzione. Dovrai annullare tutto attraverso le ripetizioni e le annullamenti accidentali prima di arrivare alle annullamenti che desideri, ma se continui a colpire C-/
, alla fine raggiungerai lo stato desiderato. In effetti, ogni stato in cui il buffer è mai stato è raggiungibile, se si C-g
preme una volta e poi si preme C-/
abbastanza volte.
Scorciatoie alternative per undo
, diversi C-/
, sono C-_
, C-x u
e M-x
undo
.
Vedi Annulla nel Manuale di Emacs per maggiori dettagli sul sistema di annullamento di Emacs.
Per coloro che desiderano avere le funzionalità di annullamento / ripetizione più comuni, qualcuno ha scritto undo-tree.el
. Fornisce l'aspetto e la sensazione di annullamento dei non-Emac, ma fornisce l'accesso all'intero "albero" della cronologia degli annullamenti.
Mi piace il sistema di annullamento integrato di Emacs, ma trovo questo pacchetto molto intuitivo.
Ecco il commento dal file stesso:
Emacs ha un potente sistema di annullamento. A differenza del sistema di annullamento / ripetizione standard nella maggior parte dei software, consente di ripristinare qualsiasi stato passato di un buffer (mentre il sistema di annullamento / ripetizione standard può perdere gli stati passati non appena si esegue la ripetizione). Tuttavia, questo potere ha un prezzo: molte persone trovano il sistema di annullamento di Emacs confuso e difficile da usare, generando una serie di pacchetti che lo sostituiscono con il sistema di annullamento / ripetizione meno potente ma più intuitivo.
Sia la perdita di dati con l'annullamento / ripetizione standard, sia la confusione dell'annullamento di Emacs derivano dal tentativo di trattare la cronologia degli annullamenti come una sequenza lineare di modifiche. Non è. La "modalità di annullamento dell'albero" fornita da questo pacchetto sostituisce il sistema di annullamento di Emacs con un sistema che considera la cronologia degli annullamenti come quella che è: un albero ramificato di modifiche. Questa semplice idea consente di combinare il comportamento più intuitivo del sistema di annullamento / ripetizione standard con la potenza di non perdere mai alcuna cronologia. Un ulteriore vantaggio aggiuntivo è che in alcuni casi la cronologia degli annullamenti può essere archiviata in modo più efficiente, consentendo di accumulare più modifiche prima che Emacs inizi a scartare la cronologia.
Fai attenzione a una stranezza di annullamento dell'albero per ripetere !
Molti popolari "kit di base" (preludio, purcell, spacemacs) vengono forniti in bundle con undo-tree. La maggior parte (tutto?) Lo abilita anche automaticamente. Come accennato, l'annullamento dell'albero è un modo pratico per visualizzare e attraversare l'albero di annullamento / ripetizione. Prelude fornisce anche un key-chord ( uu
) e anche C-x u
.
Il problema è: undo-albero sembra naufragare di default Emacs' e ben noto vincolante per redo :C-g C-/
.
Invece, puoi usare questi tasti simmetrici per annullare / ripetere :
C-/ undo
C-S-/ redo
Questi sono utili poiché a volte si desidera ripetere rapidamente senza aprire il visualizzatore.
Trovo redo.el
estremamente utile eseguire annulla / ripristina "normale" e di solito lo associo a CSz e annulla a Cz, in questo modo:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
Basta scaricare il file, inserirlo nel percorso lisp e incollare quanto sopra nel proprio .emacs
.
Emacs 28 aggiunge un comando redo (chiamato undo-redo
).
Se si desidera avere le operazioni di annullamento / ripetizione più tipiche, è possibile utilizzare i seguenti comandi.
(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)
Per impostazione predefinita, ripetere in Emacs richiede di premere Cg, quindi annullare.
Tuttavia è possibile utilizzare l'annullamento incorporato di Emacs per implementare anche un comando redo.
Il pacchetto undo-fu , utilizza la funzionalità di annullamento integrata di Emacs per esporre sia annulla che ripristina.