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?

23voto

cute_ptr Punkte 913

Wenn Sie nur eine Sitzung für das Projekt planen, machen Sie einfach

:mks

die eine Session.vim Datei im aktuellen Verzeichnis zu öffnen und dann die Sitzung (im selben Verzeichnis) zu öffnen:

vim -S

Wenn Sie die Sitzung ändern und sie speichern möchten:

:mks!

Dadurch wird die Sitzung gespeichert, nicht die Dateien selbst!

Wenn Sie mehrere Sitzungen planen Ich ziehe es vor, sie in versteckten Dateien im Projektverzeichnis zu speichern:

:mks .session-name.vim

Um sie zu öffnen (aus demselben Verzeichnis):

vim -S .session-name.vim

Sitzung speichern:

:mks! .session-name.vim

Da die Sitzungen in versteckten Dateien gespeichert werden, sollten Sie, um sie anzuzeigen, Folgendes nicht vergessen -a

ls -a

11voto

PMunch Punkte 1143

Da dies der erste Google-Treffer für mich (und wahrscheinlich auch für andere) ist, wenn es darum geht, wie man mit Sitzungen in Vim arbeitet, habe ich beschlossen, etwas zu @mathielos Antwort hinzuzufügen, wie man dies automatisch macht.

Ich mag seinen Code, aber die Hinzufügung der Lösung "only if without args" schien mir ein wenig zu fehlen. Dies ist meine modifizierte Version:

function! MakeSession(overwrite)
  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'
  if a:overwrite == 0 && !empty(glob(b:filename))
    return
  endif
  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
if(argc() == 0)
  au VimEnter * nested :call LoadSession()
  au VimLeave * :call MakeSession(1)
else
  au VimLeave * :call MakeSession(0)
endif

Die bemerkenswerte Änderung ist die optionale Überschreibung. Wenn Sie Vim ohne Optionen öffnen, wird er jede existierende Sitzung öffnen und die Änderungen überschreiben, die Sie beim Verlassen gemacht haben. Wenn Vim mit Optionen geöffnet wird, wird er nur eine neue Sitzung erzeugen, wenn keine existiert, was bedeutet, dass Sie einzelne Dateien in einem Verzeichnis öffnen können, das eine Sitzung hat, ohne sie zu überschreiben. Dann können Sie Vim ohne Optionen öffnen, um stattdessen die Sitzung zu starten. Wenn es keine Sitzung gibt, wird eine neue erstellt.

7voto

vivek Punkte 2617

Für diese Aufgabe gibt es ein sehr nützliches Plugin vim-startify das viele andere Dinge wie zuletzt geöffnete Dateien usw. handhabt, hat es auch eine sehr einfache Schnittstelle.

Ich benutze es seit ein paar Tagen und bis jetzt funktioniert es perfekt. Hoffentlich hilft es Ihnen.

3voto

WALID BELRHALMIA Punkte 441

Es gibt ein wunderbares Plugin namens vim-Sitzung . Es ist sehr leistungsfähig. Um es zu installieren:

cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git

Ich habe die Funktionalität in meinem .vimrc Datei wie diese:

nnoremap <leader>so :OpenSession 
nnoremap <leader>ss :SaveSession 
nnoremap <leader>sd :DeleteSession<CR>
nnoremap <leader>sc :CloseSession<CR>

Geben Sie nun im normalen Modus einfach <leader>ss und Sie werden einen Befehl wie diesen sehen

:SaveSession 

Fügen Sie nun den Namen Ihrer Sitzung hinzu

 :SaveSession namesession

und das ist alles.

Wenn Sie Vim schließen und wieder öffnen, machen Sie einfach

 :OpenSession

und Sie werden sehen, dass Ihre Sitzung geöffnet ist.

Es gibt eine Menge anderer Konfigurationen, die Sie in Ihre .vimrc Datei siehe die Dokumentation für Beispiele:

let g:session_directory = "~/.vim/tmp/session"  // the directory must be created before the sessions will be saved there
let g:session_autoload = "no"                   // automatic reload sessions
let g:session_autosave = "no"                   // autosave
let g:session_command_aliases = 1

Es gibt eine gute tutorial auf YouTube.

2voto

oml Punkte 103

Danke @mathielo Dem Beispiel von @mathielo folgend, habe ich die folgende Zeile in .vimrc eingefügt, um die aktive Sitzung (falls vorhanden) zu speichern:

au VimLeave * if this_session != "" | exe "mksession! ".this_session

Wenn Sie mehr Zeilen einfügen möchten, müssen Sie endif verwenden:

au VimLeave * if v:this_session != ""
au VimLeave *   exe "mksession! ".this_session
au VimLeave * endif

Sie müssen nur eine neue Sitzung in vim speichern mit

:mks [Session filename]

und nach Beginn mit

$ vim -S [Session filename]

vim wird die Sitzung starten und Sie müssen sich nicht darum kümmern, die Sitzung jedes Mal zu speichern, wenn Sie vim schließen.

Wenn Sie keine aktive Sitzung haben, wird .vimrc nichts bewirken. Wie zuvor.

Das ist es, wonach ich gesucht habe! Nochmals vielen Dank @mathielo!

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