Die meisten umfangreicheren Texteditoren bieten heutzutage die Möglichkeit beim Start automatisch wieder jene Dateien zu öffnen welche beim letzten Beenden geöffnet waren. Teilweise werden auch gezielt verschiedene Session unterstützt um sich mehrere Datei-Sets zu merken. Natürlich wird dies auch von Vim geboten.
Zum Speichern der aktuellen Session wird der Befehl mksession mit einem Dateinamen benutzt:
:mksession vim.session
Damit werden standardmäßig alle Tabs, Buffer, Optionen und noch einiges mehr gespeichert. Mehr dazu weiter unten im Artikel. Geladen kann diese Session jederzeit wieder mittels
:source vim.session
werden.
Auf diese Weise können beliebig viele Session parallel verwaltet werden. In den oberen Beispielen werden die Dateien im aktuellen Arbeitsverzeichnis abgelegt. D.h. man kann so leicht für jedes Projekt eine eigene Session direkt im Projektverzeichnis ablegen. Alternativ kann man auch eine Pfadangabe mitgeben. z.B. ~/vim.session.
Für projektspezifische Session geht das so in Ordnung. für ein generelles Session-Mangement (in meinem Fall ist immer nur der letzte Zustand gewünscht) ist es einfacher das auf eine Kurztaste zu legen. Dazu habe ich meine vimrc um folgende Zeilen erweitert:
nnoremap ss :mksession! ~/default.vimsession
nnoremap ls :source ~/default.vimsession
Automatisches sichern und wiederherstellen
Nun kann ich mittels ss bzw ls meine Standard-Session sichern bzw. laden. Wer das nun noch automatisch beim Beenden und Starten von Vim möcht kann dies mit folgenden Zeilen in der vimrc erreichen:
autocmd VimLeave * execute ':mksession! ~/default.vimsession'
autocmd VimEnter * execute ':source ~/default.vimsession'
Was wird gesichert?
Standardmäßig werden Tabs, Buffer, Optionen, lokale Optionen usw. gesichert. Optionen sind dabei alle Einstellungen aus der vimrc, lokale Optionen jene Einstellungen welche in einem Buffer händisch gesetzt wurden.
D.h. dass das Laden einer Session in allen geladenen Buffern die Einstellungen aus einer möglicherweise mittlerweile geänderten vimrc überschreiben. Da ich das nicht wollte (meine vimrc soll führend bleiben) habe ich die Optionen mit folgendem Befehl in der vimrc aus dem Sessionmanagement ausgeklammert:
set sessionoptions-=options
Somit greifen Änderungen an der vimrc auch in geladen Sessions.
All diese Zeilen finden sich auch in meiner vimrc wieder. Lediglich die Automatik ist bei mir deaktiviert. Ich finde es manuell einfach praktischer und übersichtlicher.