@ldigas Ich denke, ppl fühlen sich wohler, wenn sie die Frage hier finden (mit der großen Schriftart, der großartigen Formatierung ...) als in einem Forum der alten Schule oder einer Terminaldokumentation oder, himmlisch, auf einer manSeite
puk
6
@ldigas Ich persönlich war immer verängstigt von den Manpages b / c, die nicht dumm genug sind. Ähnlich wie alles andere unter Linux hat es eine steile Lernkurve.
Puk
45
@Idigas - Ich denke, Sie verpassen den Punkt, dass zwischen den kollektiven Smarts von uns, Google und dem Metaknowledge-Management für Stapelüberläufe - dies ist einfach ein besserer Weg, um Ihre Antworten zu erhalten - was Sie brauchen, keine lange Liste esoterischer Optionen, Auch da diese Seite die reale Erfahrung von Fallen und oft sehr raffinierte Verknüpfungen veranschaulicht, um Ihnen das Leben zu erleichtern. Dies gilt gleichermaßen für fast jedes Handbuch, das ich mir angesehen habe (außer vielleicht das PHP-Online-Handbuch). Viva Stackoverflow!
ErichBSchulz
2
@ldigas und Leute können es als zukünftige Referenz verwenden, da jemand anderes es möglicherweise benötigt.
Mansuro
4
@idigas Ich denke, diese Fragen sind real in dem Sinne, dass ein Vim-Anfänger nicht viel über das Hilfesystem und dessen Verwendung weiß, aber wenn er erfahrener wird, weiß er, wie er sich in Vim zurechtfindet.
Edgar Klerks
Antworten:
494
Du willst so etwas wie
:mksession ~/mysession.vim
Später können Sie diese VIM-Datei als Quelle verwenden und haben Ihre alte Sitzung wieder:
Ooo, und ich hätte fast vergessen, dass Sie es zurückladen können, indem Sie Folgendes eingeben: gvim -S ~ / mysession.vim
Benj
1
Danke @Benj. Ich bin neu in vim. Wie kann ich in der Befehlszeile "quellen"?
Jogusa
1
Ups! Sorry Benj, ich meinte Befehlsmodus. Ich habe es bereits gefunden: ``: source ~ / mysession.vim´´.
Jogusa
8
Kurz ist: so ~ / file. Wenn Sie die aktuelle Datei einfach als Quelle bereitstellen möchten, erledigt% die Arbeit für Sie.
Daniel Baulig
14
Wenn Sie keinen Sitzungsdateinamen angeben, wird standardmäßig geschrieben und gelesen Session.vim. Wenn Sie also nur eine Sitzung in Ihrem aktuellen Verzeichnis speichern möchten, können Sie mit :mksessionoder :mksvon vim Ihre aktuelle Sitzung speichern und sie einfach vim -Swieder öffnen.
Anishpatel
59
Möglicherweise möchten Sie diese Sitzungsoptionen in Ihrem vimrc festlegen. Besonders Optionen sind ärgerlich, wenn Sie Ihr vimrc nach dem Speichern der Sitzung geändert haben.
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
Großartig! Ich hatte gestern genau dieses Problem. Vielen Dank!
Jogusa
40
Beachten Sie Folgendes: mksession speichert die Änderungen nicht an den von Ihnen vorgenommenen Dateien. Ich habe diesen Fehler gemacht, vim zu schließen, nachdem ich die Sitzung gespeichert hatte, vorausgesetzt, ich werde von dort aus weitermachen. Aber als ich das nächste Mal die Sitzung öffnete, waren die Änderungen, die ich an den Dateien vorgenommen hatte, weg.
Dies sollte mit jeder Antwort im Zusammenhang mit kommen :mksession.
Morgan Wilde
1
Ja, Sie möchten wahrscheinlich mit einem:wqa
JonnyRaa
11
oder nur :xaein Tastendruck weniger. Yay!
Robin
Sie können vim auch so einstellen, dass Dateien automatisch gespeichert werden (wenn Sie so etwas mögen) in .vimrc: vimrc au FocusLost * silent! wa Dies speichert sich automatisch, wenn der Puffer den Fokus verliert.
Grego
32
Wenn Sie NERDTree als Datei-Explorer / Dash verwenden, würde ich das xolox / vim-session-Plugin anstelle des integrierten Befehls: mksession empfehlen. Aus irgendeinem Grund: mksession kann NERDTree-Puffer nicht wiederherstellen. Ihr Kilometerstand kann variieren, aber ich dachte, ich würde meine Erfahrungen teilen.
Für macvim muss ich sicherstellen: let g:nerdtree_tabs_open_on_gui_startup=0und let g:nerdtree_tabs_open_on_new_tab=0dass xolox / vim-session funktioniert.
Jedes Mal, wenn Sie Vim beenden, wird die aktuelle Sitzung unter ~/.vim/sessionsgespeichert und nach dem Öffnen von Vim wieder geladen. Es basiert auch auf Ihrem aktuellen Pfad. Wenn Sie also Vim aus verschiedenen Verzeichnissen öffnen, haben Sie verschiedene Sitzungen, was sehr nützlich ist, wenn Sie an verschiedenen Projekten arbeiten.
Bearbeiten Sie einfach Ihre ~/.vimrcDatei 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()
Auch für Anfänger ist dieses Skript etwas leicht zu verstehen und anpassen.
Bitte beachten Sie, dass dieses Skript nur für Unix-Systeme (MacOS / Linux) ordnungsgemäß funktioniert. Es muss an Windows angepasst werden.
UPDATE: Wenn Sie den Vorschlag von 0xc0de hinzufügen , können Sie die VimEnterZeile für diese ersetzen , wenn Vim die Sitzung nur laden soll, wenn keine Argumente angegeben sind :
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
Möglicherweise möchten Sie die Sitzung nur öffnen, wenn für vim kein Argument angegeben ist, z. if argc() == 0 au VimEnter * nested :call LoadSession() end
0xc0de
Danke @ 0xc0de, toller Vorschlag (ich habe sogar angefangen, es selbst zu benutzen). Ich habe die Antwort aktualisiert.
Mathielo
Wie würde ich dies so ändern, dass, wenn ich vim mit Argumenten öffne, diese Sitzung auch nicht gespeichert wird
Dr. Manhattan
sehr gut, aber "exe" source "b: sessionfile" braucht dort einen Punkt? und das Problem ist, dass die Autoload-Sitzung vom aktuellen Home-Verzeichnis abhängt (Get By pwd). Wie kann ich festlegen, dass es das letzte Arbeitsverzeichnis vor dem Beenden von vim ist? damit es die letzte Arbeitssitzung anstatt der Sitzung unter laden kann ~/?
van abel
Wenn Sie Sitzungen haben möchten, aber dennoch einzelne Dateien im Verzeichnis öffnen möchten, ohne es zu überschreiben, lesen Sie meine geänderte Version in der separaten Antwort: stackoverflow.com/questions/1642611/…
PMunch
6
Es gibt ein sehr nützliches Plugin für diese Aufgabe vim-startify, das viele andere Dinge wie kürzlich geöffnete Dateien usw. behandelt. Es hat auch eine sehr einfache Oberfläche.
Ich benutze es seit ein paar Tagen und bis jetzt funktioniert es perfekt. Hoffe es hilft dir.
Da dies für mich (und wahrscheinlich auch für andere) der erste Treffer bei Google ist, um mit Sitzungen in Vim zu arbeiten, habe ich beschlossen, @ mathielos Antwort, wie dies automatisch erfolgen soll, ein wenig hinzuzufügen.
Ich mag seinen Code, aber die Hinzufügung der Lösung "nur wenn ohne Argumente" schien etwas 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 hier ist die optionale Überschreibung. Wenn Sie Vim ohne Optionen öffnen, werden alle vorhandenen Sitzungen geöffnet und die beim Verlassen vorgenommenen Änderungen überschrieben. Wenn Vim mit Optionen geöffnet wird, wird nur dann eine neue Sitzung erstellt, wenn keine vorhanden ist. Dies bedeutet, dass Sie einzelne Dateien in einem Verzeichnis mit einer Sitzung öffnen können, ohne sie zu überschreiben. Anschließend können Sie Vim ohne Optionen öffnen, um stattdessen die Sitzung auszuführen. Wenn keine Sitzung vorhanden ist, wird eine neue erstellt.
Ich habe gerade Ihre oben veröffentlichte Lösung in Neovim 0.2.2 ausprobiert und Ihr Snippet platziert, $HOME/.vim/plugin/sessions.vimaber die Sitzungsdateien werden nicht gespeichert. ¯ \ _ (ツ) _ / ¯
ipatch
Dieser Thread und insbesondere der verlinkte Kommentar könnten helfen: superuser.com/questions/404686/… Ich habe ihn in meiner .vimrc und das funktioniert gut.
PMunch
habe es funktioniert, anscheinend habe ich bis Ausfahrt (n) vim , um für die Sitzung geschrieben wird Einsatz schlechten Witz Thanks for sharing wieder 👍
iPatch
3
Es gibt diese wunderbare Plugin Call Vim-Session . Es ist sehr mächtig. So installieren Sie es:
cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git
Ich habe seine Funktionalität in meiner .vimrcDatei folgendermaßen zugeordnet:
Geben <leader>ssSie jetzt im normalen Modus einfach ein und Sie sehen einen Befehl wie diesen
:SaveSession
Fügen Sie nun den Namen Ihrer Sitzung hinzu
:SaveSession namesession
und das ist alles.
Wenn Sie Vim schließen und erneut öffnen, tun Sie es einfach
:OpenSession
und Sie werden sehen, dass Ihre Sitzung geöffnet ist.
Es gibt viele andere Konfigurationen, die Sie in Ihre .vimrcDatei einfügen können. Beispiele finden Sie in der Dokumentation:
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
Persönlich wickle ich einfach das Obsession- Plugin von Tim Pope ein, um die Definition eines sessiondirPfads zu ermöglichen und die Eingabe des Pfads zu vermeiden:
Ich hatte spezielle Probleme mit dem Airline-Plugin und den Sitzungen. Die Umstellung auf Obsession hat die Probleme behoben. Nach wochenlangen Kämpfen war dies ein erstaunlicher Fund. Siehe github.com/vim-airline/vim-airline/issues/…
icc97
1
Danke @mathielo Nach dem Beispiel von @mathielo habe ich die folgende Zeile zu .vimrc hinzugefü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 mit speichern
:mks [Session filename]
und nach dem Start mit
$ vim -S [Session filename]
vim startet die Sitzung und Sie müssen sich keine Sorgen machen, um die Sitzung jedes Mal zu speichern, wenn Sie vim schließen.
Wenn Sie keine aktive Sitzung haben, führt .vimrc nichts aus. Wie vorher.
Das habe ich gesucht! Nochmals vielen Dank @mathielo!
Unten ist die einzige conf. das hat bei mir wirklich geklappt. Ich habe es von hier genommen , wo Sie auch eine vollständigere / komplexere Version nehmen können.
set viewoptions+=cursor,folds,slash,unix
set viewoptions-=options
augroup vimrc
autocmd BufWritePost *
\ if expand('%') != '' && &buftype !~ 'nofile'
\| mkview
\| endif
autocmd BufRead *
\ if expand('%') != '' && &buftype !~ 'nofile'
\| silent loadview
\| endif
augroup END
Für die Verwaltung mehrerer Sitzungen (pro Verzeichnis / Repo-Basis) habe ich kürzlich vom vim-session-Plugin zum vim-workspace gewechselt . Das Sitzungsmanagement ist relativ einfach und funktioniert ziemlich gut.
man
SeiteAntworten:
Du willst so etwas wie
Später können Sie diese VIM-Datei als Quelle verwenden und haben Ihre alte Sitzung wieder:
oder öffnen Sie vim mit der Option -S:
quelle
Session.vim
. Wenn Sie also nur eine Sitzung in Ihrem aktuellen Verzeichnis speichern möchten, können Sie mit:mksession
oder:mks
von vim Ihre aktuelle Sitzung speichern und sie einfachvim -S
wieder öffnen.Möglicherweise möchten Sie diese Sitzungsoptionen in Ihrem vimrc festlegen. Besonders Optionen sind ärgerlich, wenn Sie Ihr vimrc nach dem Speichern der Sitzung geändert haben.
quelle
Beachten Sie Folgendes: mksession speichert die Änderungen nicht an den von Ihnen vorgenommenen Dateien. Ich habe diesen Fehler gemacht, vim zu schließen, nachdem ich die Sitzung gespeichert hatte, vorausgesetzt, ich werde von dort aus weitermachen. Aber als ich das nächste Mal die Sitzung öffnete, waren die Änderungen, die ich an den Dateien vorgenommen hatte, weg.
quelle
:mksession
.:wqa
:xa
ein Tastendruck weniger. Yay!.vimrc
:vimrc au FocusLost * silent! wa
Dies speichert sich automatisch, wenn der Puffer den Fokus verliert.Wenn Sie NERDTree als Datei-Explorer / Dash verwenden, würde ich das xolox / vim-session-Plugin anstelle des integrierten Befehls: mksession empfehlen. Aus irgendeinem Grund: mksession kann NERDTree-Puffer nicht wiederherstellen. Ihr Kilometerstand kann variieren, aber ich dachte, ich würde meine Erfahrungen teilen.
quelle
let g:nerdtree_tabs_open_on_gui_startup=0
undlet g:nerdtree_tabs_open_on_new_tab=0
dass xolox / vim-session funktioniert.Wenn Sie den Prozess ohne Verwendung von Plugins automatisieren möchten, können Sie Go away verwenden und aus dem Vim Tips Wiki zurückkehren .
Jedes Mal, wenn Sie Vim beenden, wird die aktuelle Sitzung unter
~/.vim/sessions
gespeichert und nach dem Öffnen von Vim wieder geladen. Es basiert auch auf Ihrem aktuellen Pfad. Wenn Sie also Vim aus verschiedenen Verzeichnissen öffnen, haben Sie verschiedene Sitzungen, was sehr nützlich ist, wenn Sie an verschiedenen Projekten arbeiten.Bearbeiten Sie einfach Ihre
~/.vimrc
Datei und fügen Sie Folgendes hinzu:Auch für Anfänger ist dieses Skript etwas leicht zu verstehen und anpassen.
Bitte beachten Sie, dass dieses Skript nur für Unix-Systeme (MacOS / Linux) ordnungsgemäß funktioniert. Es muss an Windows angepasst werden.
UPDATE: Wenn Sie den Vorschlag von 0xc0de hinzufügen , können Sie die
VimEnter
Zeile für diese ersetzen , wenn Vim die Sitzung nur laden soll, wenn keine Argumente angegeben sind :quelle
if argc() == 0 au VimEnter * nested :call LoadSession() end
pwd
). Wie kann ich festlegen, dass es das letzte Arbeitsverzeichnis vor dem Beenden von vim ist? damit es die letzte Arbeitssitzung anstatt der Sitzung unter laden kann~/
?Es gibt ein sehr nützliches Plugin für diese Aufgabe vim-startify, das viele andere Dinge wie kürzlich geöffnete Dateien usw. behandelt. Es hat auch eine sehr einfache Oberfläche.
Ich benutze es seit ein paar Tagen und bis jetzt funktioniert es perfekt. Hoffe es hilft dir.
quelle
Da dies für mich (und wahrscheinlich auch für andere) der erste Treffer bei Google ist, um mit Sitzungen in Vim zu arbeiten, habe ich beschlossen, @ mathielos Antwort, wie dies automatisch erfolgen soll, ein wenig hinzuzufügen.
Ich mag seinen Code, aber die Hinzufügung der Lösung "nur wenn ohne Argumente" schien etwas zu fehlen. Dies ist meine modifizierte Version:
Die bemerkenswerte Änderung hier ist die optionale Überschreibung. Wenn Sie Vim ohne Optionen öffnen, werden alle vorhandenen Sitzungen geöffnet und die beim Verlassen vorgenommenen Änderungen überschrieben. Wenn Vim mit Optionen geöffnet wird, wird nur dann eine neue Sitzung erstellt, wenn keine vorhanden ist. Dies bedeutet, dass Sie einzelne Dateien in einem Verzeichnis mit einer Sitzung öffnen können, ohne sie zu überschreiben. Anschließend können Sie Vim ohne Optionen öffnen, um stattdessen die Sitzung auszuführen. Wenn keine Sitzung vorhanden ist, wird eine neue erstellt.
quelle
$HOME/.vim/plugin/sessions.vim
aber die Sitzungsdateien werden nicht gespeichert. ¯ \ _ (ツ) _ / ¯Es gibt diese wunderbare Plugin Call Vim-Session . Es ist sehr mächtig. So installieren Sie es:
Ich habe seine Funktionalität in meiner
.vimrc
Datei folgendermaßen zugeordnet:Geben
<leader>ss
Sie jetzt im normalen Modus einfach ein und Sie sehen einen Befehl wie diesenFügen Sie nun den Namen Ihrer Sitzung hinzu
und das ist alles.
Wenn Sie Vim schließen und erneut öffnen, tun Sie es einfach
und Sie werden sehen, dass Ihre Sitzung geöffnet ist.
Es gibt viele andere Konfigurationen, die Sie in Ihre
.vimrc
Datei einfügen können. Beispiele finden Sie in der Dokumentation:Auf YouTube gibt es ein gutes Tutorial .
quelle
Persönlich wickle ich einfach das Obsession- Plugin von Tim Pope ein, um die Definition eines
sessiondir
Pfads zu ermöglichen und die Eingabe des Pfads zu vermeiden:quelle
Danke @mathielo Nach dem Beispiel von @mathielo habe ich die folgende Zeile zu .vimrc hinzugefügt, um die aktive Sitzung (falls vorhanden) zu speichern:
Wenn Sie mehr Zeilen einfügen möchten, müssen Sie endif verwenden:
Sie müssen nur eine neue Sitzung in vim mit speichern
und nach dem Start mit
vim startet die Sitzung und Sie müssen sich keine Sorgen machen, um die Sitzung jedes Mal zu speichern, wenn Sie vim schließen.
Wenn Sie keine aktive Sitzung haben, führt .vimrc nichts aus. Wie vorher.
Das habe ich gesucht! Nochmals vielen Dank @mathielo!
quelle
:q
anstatt:bd
... Danke!Wenn Sie nur eine Sitzung für das Projekt planen, tun Sie dies einfach
Dadurch wird eine
Session.vim
Datei im aktuellen Verzeichnis erstellt und anschließend die Sitzung (aus demselben Verzeichnis) geöffnet:Wenn Sie die Sitzung ändern und speichern möchten:
Wenn Sie mehrere Sitzungen planen, möchte ich diese lieber in versteckten Dateien im Projektverzeichnis speichern:
So öffnen Sie es (aus demselben Verzeichnis):
Sitzung speichern:
Da die Sitzungen in versteckten Dateien gespeichert sind, vergessen Sie nicht, sie anzuzeigen
-a
quelle
Sie können die Sitzung speichern, wo immer Sie möchten.
Ex:
Dadurch wird die Sitzung im Laufwerk D gespeichert.
Dies kann durch Eingabe geöffnet werden
in einer der vim-Dateien.
quelle
Unten ist die einzige conf. das hat bei mir wirklich geklappt. Ich habe es von hier genommen , wo Sie auch eine vollständigere / komplexere Version nehmen können.
quelle
Für die Verwaltung mehrerer Sitzungen (pro Verzeichnis / Repo-Basis) habe ich kürzlich vom vim-session-Plugin zum vim-workspace gewechselt . Das Sitzungsmanagement ist relativ einfach und funktioniert ziemlich gut.
quelle