423 Stimmen

Wie kann man mehrere verschiedene Sitzungen in Vim speichern und wiederherstellen?

Je nach meiner Aufgabe in Vim habe ich mehrere Registerkarten geöffnet.

Wie kann ich verschiedene Sitzungen zur späteren Verwendung speichern?

574voto

Benj Punkte 30394

Sie wollen etwas wie

:mksession ~/mysession.vim

Später können Sie dann die vim-Datei als Quelle verwenden und haben Ihre alte Sitzung wieder:

:source ~/mysession.vim

oder öffnen Sie vim mit der Option -S:

$ vim -S ~/mysession.vim

72voto

Jan Christoph Punkte 691

Vielleicht möchten Sie diese Sitzungsoptionen in Ihrer vimrc einstellen. Besonders Optionen sind lästig, wenn Sie Ihre vimrc geändert haben, nachdem Sie die Sitzung gespeichert haben.

set ssop-=options    " do not store global and local values in a session
set ssop-=folds      " do not store folds

43voto

Deepanshu Punkte 786

Beachten Sie, dass :mksession die Änderungen an den Dateien, die Sie vorgenommen haben, nicht speichern wird. Ich machte den Fehler, vim nach dem Speichern der Sitzung zu schließen, in der Annahme, dass ich von dort aus weitermachen würde. Aber als ich die Sitzung das nächste Mal öffnete, waren die Änderungen, die ich an den Dateien vorgenommen hatte, weg.

36voto

gdso Punkte 1801

Wenn Sie NERDTree als Datei-Explorer/Dash verwenden, würde ich empfehlen xolox/vim-session plugin anstelle des eingebauten Befehls :mksession. Aus irgendeinem Grund schlägt :mksession bei der Wiederherstellung von NERDTree-Puffern fehl. Das mag bei Ihnen anders sein, aber ich dachte, ich teile meine Erfahrung.

29voto

mathielo Punkte 6614

Wenn Sie den Prozess ohne die Verwendung von Plugins automatisieren möchten, können Sie Folgendes verwenden Geh weg und komm zurück de Vim Tipps Wiki .

Jedes Mal, wenn Sie Vim beenden, speichert er die aktuelle Sitzung unter ~/.vim/sessions und laden Sie es wieder, sobald Vim geöffnet ist. Es basiert auch auf dem aktuellen Pfad, so dass Sie, wenn Sie Vim von verschiedenen Verzeichnissen aus öffnen, verschiedene Sitzungen haben werden, was ziemlich nützlich ist, wenn Sie an verschiedenen Projekten arbeiten.

Bearbeiten Sie einfach Ihre ~/.vimrc Datei und fügen Sie Folgendes hinzu:

function! MakeSession()
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  if (filewritable(b:sessiondir) != 2)
    exe 'silent !mkdir -p ' b:sessiondir
    redraw!
  endif
  let b:filename = b:sessiondir . '/session.vim'
  exe "mksession! " . b:filename
endfunction

function! LoadSession()
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  let b:sessionfile = b:sessiondir . "/session.vim"
  if (filereadable(b:sessionfile))
    exe 'source ' b:sessionfile
  else
    echo "No session loaded."
  endif
endfunction

" Adding automatons for when entering or leaving Vim
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession()

Selbst für einen Anfänger ist dieses Skript etwas einfach zu verstehen und anzupassen.

Bitte beachten Sie dieses Skript funktioniert nur auf Unix-Systemen (MacOS/Linux), es muss für Windows angepasst werden.


UPDATE: Hinzufügen von 0xc0de können Sie die VimEnter Zeile für diese, wenn Sie wollen, dass Vim die Sitzung lädt nur wenn keine Argumente angegeben werden :

if(argc() == 0)
  au VimEnter * nested :call LoadSession()
endif

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X