Wie kann ich die Undatei verwenden?

36

Die letzte Nachricht auf vim.org befasst sich mit der Verwendung des Undofiles, um Ihren Verlauf zu speichern und Änderungen auch nach einem Neustart rückgängig zu machen:

Eine Funktion, die ich gerne selbst benutze, ist vielen Nutzern nicht bekannt, wie ich am vergangenen Wochenende herausgefunden habe. Neben dem Rückgängigmachen mit so vielen Ebenen, wie Sie möchten, bietet Vim auch die Speicherung der Rückgängigmachungsinformationen in einer Datei an. So können Sie Vim beenden, Ihren Computer neu starten und die vorgenommenen Änderungen rückgängig machen. Siehe die Hilfe für 'undofile'. (Bram Moolenaar)

Wie kann ich diese Funktion aktivieren und verwenden?

Rückgängig machen
quelle
2
Bram sprach wahrscheinlich über dieses Ereignis
Kurt Pfeifle

Antworten:

37

Die einfachste Version ist: Erstelle ein ~/.vim/undo-dir/Verzeichnis und füge Folgendes hinzu .vimrc:

set undodir=~/.vim/undo-dir
set undofile

Es ist jedoch nicht einwandfrei und es ist besser, weiterzulesen. Von mir selbst .vimrc:

" Let's save undo info!
if !isdirectory($HOME."/.vim")
    call mkdir($HOME."/.vim", "", 0770)
endif
if !isdirectory($HOME."/.vim/undo-dir")
    call mkdir($HOME."/.vim/undo-dir", "", 0700)
endif
set undodir=~/.vim/undo-dir
set undofile

Ich bevorzuge es, zufällige Verzeichnisse nicht mit Undo-Dateien zu überladen. Also habe ich die undodirOption gesetzt, die alle in einem Undo-Verzeichnis ablegt. Das führt zu einem Problem: Ich bin faul und möchte dieses Verzeichnis nicht auf allen meinen Computern erstellen (ich verwende ein Versionskontrollsystem, um meine .vimrcDaten auf mehreren Computern zu synchronisieren ). Zum Glück ist es einfach genug, die Verzeichnisse von Vim überprüfen zu lassen und zu erstellen, wenn sie nicht existieren.

Beachten Sie auch den 0700Modus im Rückgängig-Verzeichnis (das sind die vollständigen Berechtigungen für den Eigentümer, keine Berechtigungen für andere Personen). Welche Dateien ich wann bearbeitet habe, etc. sollen privat bleiben. Und da dies ein Verzeichnis ist, auf das nur ich zugreifen kann, muss ich mir keine Sorgen machen, dass jemand anderes einen Symlink oder eine eigene Datei zum Rückgängigmachen einfügt, oder was auch immer, wenn Sie sich Gedanken über die Verwendung eines temporären Systemverzeichnisses machen müssen.

Da es sich nicht um ein temporäres Systemverzeichnis handelt, unterliegt es nicht der Richtlinie zur Bereinigung von Systemdateien. Oft ist das ziemlich kurz - ungefähr eine Woche. Damit es nicht für immer wächst, habe ich Folgendes in meine Liste aufgenommen crontab:

# m h  dom mon dow   command
 43 00 *   *   3     find /home/anthony/.vim/undo-dir -type f -mtime +90 -delete

Nach 90 Tagen ohne Änderung werden sie gelöscht. (Ehrlich gesagt sind sie nicht wirklich so groß, Sie könnten sie leicht für immer damit belassen, wie billig die Festplatte ist. Beachten Sie jedoch auch Ihre Privatsphäre, wenn Ihr Computer jemals kompromittiert wird.)

derobert
quelle
Danke für die ausführliche Antwort @derobert! Ich weiß, dass dies eine alte Frage ist, aber ich habe versucht, eine Vimscript-Methode zum Löschen alter Vim-Undo-Dateien zu finden ( vi.stackexchange.com/questions/16053/… ). Ich denke, es wäre sauberer, es so zu machen, aber es erweist sich als nicht einfach. Haben Sie jemals daran gedacht, ein Vimscript zum Löschen der alten Vim-Dateien zu verwenden? Wenn nicht, würden Sie Crontab immer noch über einem Vimscript verwenden?
Logan
1
@Logan Die Verwendung eines VIM-Skripts funktioniert nur, wenn VIM ausgeführt wird. Und was ist, wenn mehrere VIMs ausgeführt werden? Diese Cron-Linie ist einfach, leidet nicht unter diesen Problemen und ist eindeutig korrekt ...
Derobert
Es scheint, dass die mkdir()Funktion das Erstellen mehrerer Verzeichnisstrukturen mit der "p"Option für {path}Parameter unterstützt. Das obige Skript kann also etwas vereinfacht werden. Verwenden call mkdir($HOME."/.vim/undo-dir", "p", 0700)funktioniert für mich mindestens in Vim 7.4.160.
JDHAO