Selon ma tâche dans Vim, plusieurs tabs sont ouverts.
Comment puis-je enregistrer différentes sessions pour une utilisation ultérieure?
Vous voulez quelque chose comme
:mksession ~/mysession.vim
Ensuite, vous pouvez vous procurer ce fichier vim et récupérer votre ancienne session:
:source ~/mysession.vim
ou ouvrez vim avec l’option -S:
$ vim -S ~/mysession.vim
Vous voudrez peut-être définir ces options de session dans votre vimrc. Les options sont particulièrement ennuyeuses lorsque vous avez modifié votre vimrc après avoir enregistré la session.
set ssop-=options " do not store global and local values in a session set ssop-=folds " do not store folds
Notez que: mksession n’enregistre pas les modifications apscopes aux fichiers que vous avez créés. J’ai commis cette erreur en fermant vim après avoir sauvegardé la session en supposant que je reprendrai à partir de là. Mais la prochaine fois que j’ai ouvert la session, les modifications apscopes aux fichiers avaient disparu.
Si vous utilisez NERDTree comme explorateur de fichiers / tableau de bord, je vous recommande le plug-in xolox / vim-session au lieu de la commande intégrée: mksession. Pour une raison quelconque: mksession ne parvient pas à restaurer les tampons NERDTree. Votre kilométrage peut varier, mais j’ai pensé partager mon expérience.
Si vous souhaitez automatiser le processus sans utiliser de plug-ins, vous pouvez utiliser Go away et revenir de Wiki Wiki Conseils .
Chaque fois que vous quittez Vim, la session en cours sera sauvegardée sous ~/.vim/sessions
et ~/.vim/sessions
une fois que Vim est ouvert. Il est également basé sur votre chemin actuel, donc si vous ouvrez Vim à partir de différents répertoires, vous aurez différentes sessions, ce qui est très utile lorsque vous travaillez sur différents projets.
~/.vimrc
simplement votre fichier ~/.vimrc
et ajoutez ce qui suit:
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()
Même pour un débutant, ce script est assez facile à comprendre et à personnaliser.
Veuillez noter que ce script ne fonctionnera correctement que pour les systèmes Unix (MacOS / Linux), il doit être adapté pour fonctionner sous Windows.
UPDATE: En ajoutant la suggestion de 0xc0de , vous pouvez remplacer la ligne VimEnter
pour celles-ci si vous voulez que Vim charge la session uniquement si aucun argument n’est fourni :
if(argc() == 0) au VimEnter * nested :call LoadSession() endif
Il y a un plugin très utile pour cette tâche vim-startify qui gère beaucoup d’autres choses comme les fichiers récemment ouverts, etc., il a aussi une interface très simple.
Je l’utilise depuis quelques jours et jusqu’à maintenant, il fonctionne parfaitement. J’espère que ça vous aide.
Il y a ce merveilleux plugin appel vim-session . C’est très puissant. Pour l’installer:
cd ~/.vim/bundle git clone https://github.com/xolox/vim-session.git
J’ai mappé ses fonctionnalités dans mon fichier .vimrc
comme ceci:
nnoremap so :OpenSession nnoremap ss :SaveSession nnoremap sd :DeleteSession nnoremap sc :CloseSession
Maintenant, en mode normal, tapez simplement
et vous verrez une commande comme celle-ci
:SaveSession
Maintenant, ajoutez le nom de votre session
:SaveSession namesession
et c’est tout.
Lorsque vous fermez Vim et que vous le rouvrez, faites-le simplement
:OpenSession
et vous verrez votre session ouverte.
Il y a beaucoup d’autres configurations à append dans votre fichier .vimrc
, voir la documentation pour des exemples:
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
Il existe un bon tutoriel sur YouTube.
Comme il s’agit du premier hit sur Google pour moi (et probablement pour d’autres) sur la façon de travailler avec des sessions dans Vim, j’ai décidé d’append un peu à la réponse de @ mathielo sur la manière de rendre cela automatique.
J’aime son code, mais l’ajout de la solution “seulement si sans args” semblait faire défaut. Ceci est ma version modifiée:
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
Le changement notable ici est le remplacement facultatif. Si vous ouvrez Vim sans options, toutes les sessions existantes seront écrasées et les modifications apscopes à votre départ seront écrasées. Si Vim est ouvert avec des options, il ne créera une nouvelle session que si aucune n’existe, cela signifie que vous pouvez ouvrir des fichiers uniques dans un répertoire qui a une session sans la remplacer. Ensuite, vous pouvez ouvrir Vim sans options pour exécuter la session à la place. S’il n’y a pas de session, il en crée une nouvelle.
Merci @mathielo Suivant l’exemple de @mathielo, j’ai ajouté la ligne ci-dessous à .vimrc pour enregistrer la session active (le cas échéant):
au VimLeave * if this_session != "" | exe "mksession! ".this_session
Si vous voulez mettre plus de lignes, vous devez utiliser endif:
au VimLeave * if v:this_session != "" au VimLeave * exe "mksession! ".this_session au VimLeave * endif
Il vous suffit de sauvegarder une nouvelle session dans vim avec
:mks [Session filename]
et après avoir commencé
$ vim -S [Session filename]
vim démarre la session et vous n’avez pas à vous soucier de sauvegarder la session chaque fois que vous fermez vim.
Si vous n’avez pas de session active, .vimrc ne fera rien. Comme avant.
C’est ce que je cherchais! Merci encore @mathielo!
Personnellement, je passe juste en sessiondir
plugin Obsession de Tim Pope pour permettre de définir un sessiondir
et éviter de taper le chemin:
let g:sessiondir = $HOME . ".vim/sessions" command! -nargs=1 MkSession call MkSession() function! MkSession(sessionfile) if !isdirectory(g:sessiondir) call mkdir(g:sessiondir, "p") endif exe 'Obsession' g:sessiondir . '/' . a:sessionfile endfunction command! -nargs=1 LoadSession call LoadSession( ) function! LoadSession(sessionfile) let a:sessionpath = g:sessiondir . a:sessionfile if (filereadable(a:sessionpath)) exe 'source ' a:sessionpath else echo "No session loaded." endif endfunction
Vous pouvez stocker la session où vous voulez.
Ex:
:mksession! D:/session.ses
Cela stocke la session dans le lecteur D.
Cela peut être ouvert en tapant
:so D:/session.ses
dans l’un des fichiers vim.
Ci-dessous la seule conf. ça a vraiment fonctionné pour moi. Je l’ai pris à partir d’ ici , où vous pouvez également prendre une version plus complète / complexe.
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
Si vous prévoyez d’avoir une seule session pour le projet, faites-le
:mks
qui va créer un fichier Session.vim
dans le répertoire en cours, puis ouvrir la session (à partir du même répertoire):
vim -S
Si vous modifiez la session et souhaitez l’enregistrer:
:mks!
Cela enregistre la session, pas les fichiers eux-mêmes!
Si vous prévoyez d’avoir plusieurs sessions , je préfère les enregistrer dans des fichiers cachés dans le répertoire du projet:
:mks .session-name.vim
Pour l’ouvrir (du même répertoire):
vim -S .session-name.vim
Sauvegarder la session:
:mks! .session-name.vim
Comme les sessions sont enregistrées dans des fichiers cachés, pour les afficher, n’oubliez pas -a
ls -a
Pour gérer plusieurs sessions (par répertoire / référentiel), je suis récemment passé du plug-in vim-session à vim-workspace . Sa gestion de session est relativement simple et fonctionne plutôt bien.