Gibt es ein vim-Plugin, das die Hot-Exit-Funktion für erhabenen Text implementiert?


11

Hot Exit ist eine der Killerfunktionen des Sublime Text Editors. Es ermöglicht das Schließen des Editors zu jedem Zeitpunkt, ohne sich um Änderungen in geöffneten Dateien kümmern zu müssen - es wird einfach ohne Frage geschlossen. Beim erneuten Starten von ST befinden sich alle geöffneten und bearbeiteten Dateien im selben Zustand wie vor dem Schließen

Ich frage mich, ob es einen Weg gibt, dasselbe in vim zu tun.


: xa alle beenden (alle Änderungen speichern und Vim schließen)
Sim

Dies schreibt die Dateien, speichert aber nichts anderes. Ich denke, das OP möchte etwas, das sowohl die Dateien speichert, ohne sie zu schreiben, als auch den Status aller geöffneten Tabs oder Puffer speichert
EvergreenTree

Ja, das habe ich später aus seinen Kommentaren verstanden.
Sim

Antworten:


6

Vim kann dies tun, obwohl es etwas klobig sein kann und einige Einstellungen erfordert.

Romainl bringt dich auf halbem Weg mit session. Die fehlenden Bits sind Auslagerungsdateien :preserveund das &Flag für cpoptions.

Auslagerungsdateien sind für die Wiederherstellung vorgesehen, wenn Vim oder Ihr System abstürzt. Mit ihnen können Sie nicht gespeicherte Änderungen wiederherstellen (mit einigen Einschränkungen, siehe :he swap-file). Wenn Vim jedoch normal beendet wird, werden alle verwendeten Auslagerungsdateien gelöscht, selbst wenn der Puffer nicht gespeicherte Änderungen hatte.

Das ist , wo :preserveund cpoptions‚s &kommt in. :preserveKräften Vim alle Puffer , um ihre Swap - Dateien sofort zu schreiben (wie nach 4 Sekunden oder 200 Zeichen zum Standard im Gegensatz oder was auch immer Ihre Optionen eingestellt haben es). Wenn Sie dies tun, :set cpoptions+=&wird Vim angewiesen, die beim normalen Beenden gespeicherten Auslagerungsdateien nicht zu löschen :preserve.

Leider bereinigt Vim Swap-Dateien bei der Wiederherstellung nicht automatisch, sodass Sie bald ein Verzeichnis haben können, das folgendermaßen aussieht:

.foo.txt.swn
.foo.txt.swo
.foo.txt.swp
foo.txt

Sie können die älteren manuell löschen, aber Vim bietet nur dann automatisch eine Wiederherstellung an, wenn es eine *.swpDatei gibt, in der die neue Auslagerungsdatei abgelegt wird. Der :recoverBefehl zwingt Vim, nach Auslagerungsdateien zu suchen, von denen wiederhergestellt werden kann.

Mithilfe von Auto-Befehlen können Sie das Speichern (wahrscheinlich mit dem QuitPreEreignis) und das Wiederherstellen (wahrscheinlich mit BufReadoder BufReadPost) automatisieren . Recover.vim ist ein Plugin, das möglicherweise als benutzerfreundlichere Alternative für die Verwaltung der Wiederherstellung fungiert. Es scheint auch die Bereinigung von Auslagerungsdateien zu handhaben. Ich bin nicht sicher, wie es mit einem Verzeichnis mit einer, .swoaber ohne .swpDatei umgehen würde . Möglicherweise müssen Sie :recoverfür diesen Fall noch verwenden.

vim-obsession ist ein weiteres Plugin, das behauptet, die Handhabung von Sitzungen erheblich zu vereinfachen.


1

Ja. Es heißt "Sitzung" und Sie können alles darüber lesen in:

:help session

1
Ich bin mir über Sitzungen bewusst. Aber es scheint nicht dasselbe zu sein - es speichert alle geöffneten Puffer und Registerkarten (und Einstellungen), aber wenn Sie einige Änderungen an einem der Puffer haben, müssen Sie diese vor dem Beenden auf die Festplatte schreiben. In erhabenem Text müssen Sie die geöffnete Datei beim Beenden nicht speichern - sublime speichert alle Änderungen an einem separaten Ort und stellt sie beim erneuten Öffnen wieder her. Die Originaldatei bleibt also auf der Festplatte unberührt, aber die Änderungen gehen auch nicht verloren
LazyS

Ja, das wäre der Hauptunterschied. Keine Ahnung, ob dies auf irgendeine Weise erreicht werden kann, ohne auf tmux / screen / separate zurückzugreifen.
Romainl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.