Je nach meiner Aufgabe in Vim habe ich mehrere Registerkarten geöffnet.
Wie kann ich verschiedene Sitzungen zur späteren Verwendung speichern?
Je nach meiner Aufgabe in Vim habe ich mehrere Registerkarten geöffnet.
Wie kann ich verschiedene Sitzungen zur späteren Verwendung speichern?
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
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.
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.
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.
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 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.