8
votes

Emacs: Nettoyage des annulations

J'ai remarqué que dans des sessions d'édition longues, appeler Undo-arborescence (c-x c-u) devient plus lent et plus lent. Je présume que la raison est que, car l'arbre pousse plus grand, il faut plus de temps pour l'analyser (car il garde une trace de toutes mes modifications depuis que j'ai ouvert le fichier)

Y a-t-il un moyen de nettoyer l'arborescence de l'UNDOS sur un fichier ouvert? J'ai essayé cx cv ( recherche-alternate-fichier ), mais cela ouvre le fichier qui réinitialise le curseur (et dans les modes tels que org-mode < / code> effondre mes listes)


0 commentaires

4 Réponses :


8
votes

Réinitialiser le tampon-tann-arborescence code> variable à l'aide de M-: (SETQ tampon-tann-arbre nil) code>. Ceci repeille l'ensemble des antécédents du tampon, tel que enregistré par annuler-arbor.el code>.

Ceci peut également être effectué dans une commande et lié à une clé avec code comme celui-ci: p >

(defun clear-undo-tree ()
  (interactive)
  (setq buffer-undo-tree nil))
(global-set-key [(control c) u] 'clear-undo-tree)


2 commentaires

Merci. Savez-vous quelle est la différence entre votre réponse et celle de @npostavs?


Une différence est que annuler-arbores-jupard-historique essaie de pruneal de l'historique en fonction des variables annuler-limite , défaire-limite , et Undo-externe-limite , tandis que ma solution supprime l'historique des annulations complètes. Plus important encore, Undo-Tree-Discard-Historique est automatiquement invoqué sur toutes les opérations d'annulation / redo / redo / commutateur, donc évidemment, cela ne fonctionne pas pour vous.



1
votes

Vous pouvez tailler l'arborescence au lieu de jeter le tout:

undo-tree-discard-history is a compiled Lisp function in
`undo-tree.el'.

(undo-tree-discard-history)

Discard undo history until we're within memory usage limits
set by `undo-limit', `undo-strong-limit' and `undo-outer-limit'.


2 commentaires

Quelle est la différence entre appeler la fonction (anglo-arbores-jupard) et régler la variable (tampon-annulation) à nil nil ? (comme dans @ user4815162342 réponse)


@ user273158: réduire ou supprimer entièrement selon l'utilisateur 4815162342 Commentaire. Je n'avais pas remarqué que cela s'appelait chaque annulation / refait. Vraisemblablement, vous pourriez réduire les limites pour le rendre plus efficace.



4
votes

Notez que cette pointe peut être obsolète dans les versions récentes des annulations. À partir de la version 0.6, Annuler l'arbre utilise "dessin paresseux" par défaut. Cela accélère considérablement la visualisation des grands arbres d'annulation, en tirant uniquement la partie visible (et en l'étendant si nécessaire que vous déplacez autour de l'arbre). Voir la docstring pour le Undo-Tree-Visualizer-paresseux-dessin variable pour plus de détails.

Si vous voulez néanmoins supprimer l'intégralité de l'arborescence d'annulation, régler manuellement tampon-tannant-arborescence à nil est une bonne solution unique. Une solution à plus longue durée consiste à réduire les valeurs de annuler-limite , échec-forte-limite et défaire-externe-limite à limiter La taille des arbres d'annulation, en limitant la quantité d'antécédents d'annulation qu'il stocke avant de jeter des données plus anciennes.

Appeler manuellement Undo-Tree-Discard-Historique est inutile. Il est appelé automatiquement chaque fois que vous faites quelque chose d'annulation.


0 commentaires

2
votes

De temps en temps, je dois affleurer un annulation d'un tampon, car j'ai collé un texte qui contenait des caractères qui ne peuvent pas être affichés dans le codage actuel de la mémoire tampon / du fichier. J'ai donc trouvé la fonction de @amelio Vazquez-Reina très utile. Cependant, je ne veux pas que la fonction soit appelée par accident, donc une invite de confirmation ajoutée et un chèque que tampon-tann-arborescent code> est vraiment une variable locale tampon:

(defun clean-undo-tree ()
"Clear current buffer's undo-tree.
Undo-tree can cause problems with file encoding when characters
are inserted that cannot be represented using the files current
encoding. This is even the case when characters are only
temporarily inserted, e.g. pasted from another source and then
instantly deleted. In these situations it can be necessary to
clear the buffers undo-tree before saving the file."
  (interactive)
  (let ((buff (current-buffer)))
    (if (local-variable-p 'buffer-undo-tree)
        (if (y-or-n-p "Clear buffer-undo-tree? ")
            (progn
              (setq buffer-undo-tree nil)
              (message "Cleared undo-tree of buffer: %s" (buffer-name buff)))
          (message "Cancelled clearing undo-tree of buffer: %s" (buffer-name buff)))
      (error "Buffer %s has no local binding of `buffer-undo-tree'" (buffer-name buff)))))


0 commentaires