@ldigas Je pense que ppl se sent plus à l'aise de trouver la question ici (avec la grande police, la mise en forme excellente ...) que sur un forum de la vieille école ou une documentation de terminal, ou, Dieu nous en préserve, une manpage
puk
6
@ldigas Personnellement, j'ai toujours été effrayé par les pages de manuel b / c, ils ne sont pas suffisamment stupides. Comme tout le reste sous Linux, il a une courbe d'apprentissage abrupte.
puk
45
@Idigas - Je pense que vous manquez le point qu'entre l'intelligence collective de nous, google, et la gestion des méta-connaissances de débordement de pile - c'est simplement une meilleure façon d'obtenir vos réponses - ce dont vous avez besoin, pas une longue liste d'options ésotériques, également car cette page illustre l'expérience réelle des pièges et des raccourcis souvent très astucieux pour vous faciliter la vie. Cela s'applique également à presque tous les manuels que j'ai consultés (sauf peut - être le manuel php en ligne). Viva stackoverflow!
ErichBSchulz
2
@ldigas et les gens peuvent l'utiliser pour référence future, car quelqu'un d'autre pourrait en avoir besoin.
Mansuro
4
@idigas Je pense que ces questions sont réelles dans le sens où un débutant vim ne sait pas grand-chose sur le système d'aide et comment l'utiliser, mais s'il devient plus expérimenté, il saura trouver son chemin dans vim.
Edgar Klerks
Réponses:
494
Tu veux quelque chose comme
:mksession ~/mysession.vim
Ensuite, vous pourrez récupérer ce fichier vim et vous récupérerez votre ancienne session:
Ooo, et j'ai presque oublié que vous pouvez le recharger en tapant: gvim -S ~ / mysession.vim
Benj
1
Merci @Benj. Je suis nouveau à Vim. Comment puis-je «source» dans la ligne de commande?
Jogusa
1
Oups! Désolé Benj, je voulais dire le mode commande. Je l'ai déjà trouvé: ``: source ~ / mysession.vim´´.
Jogusa
8
Court est: donc ~ / fichier. Si vous souhaitez simplement source le fichier actuel:% fera le travail pour vous.
Daniel Baulig
14
Si vous ne spécifiez pas de nom de fichier de session, il sera par défaut écrit et lu Session.vim. Donc, si vous ne souhaitez enregistrer qu'une seule session dans votre répertoire actuel, vous pouvez utiliser :mksessionou à :mkspartir de vim pour enregistrer votre session actuelle et simplement l' vim -Souvrir.
anishpatel
59
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
Génial! J'ai eu exactement ce problème hier. Merci beaucoup!
Jogusa
40
Notez que: mksession n'enregistrera pas les modifications apportées aux fichiers que vous avez créés. J'ai fait cette erreur de fermer 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 que j'avais apportées aux fichiers avaient disparu.
Cela devrait venir avec toute réponse liée à :mksession.
Morgan Wilde
1
oui, vous voulez probablement suivre avec un:wqa
JonnyRaa
11
ou juste :xaune frappe de moins. Yay!
robin
Vous pouvez également configurer vim pour enregistrer automatiquement les fichiers (si vous aimez ce genre de chose) dans votre .vimrc: vimrc au FocusLost * silent! wa Cela enregistrera automatiquement chaque fois que le tampon perd le focus.
grego
32
Si vous utilisez NERDTree comme explorateur de fichiers / dash, je recommanderais le plugin 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.
Pour macvim, je dois m'assurer: let g:nerdtree_tabs_open_on_gui_startup=0et let g:nerdtree_tabs_open_on_new_tab=0faire fonctionner xolox / vim-session.
Nianliang
18
Si vous souhaitez automatiser le processus sans utiliser de plugins, vous pouvez utiliser Go away et revenir du wiki Vim Tips .
Chaque fois que vous quittez Vim, il enregistre la session en cours ~/.vim/sessionset la charge à nouveau une fois Vim 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.
Modifiez simplement votre ~/.vimrcfichier 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 quelque peu 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.
MISE À JOUR: En ajoutant la suggestion de 0xc0de , vous pouvez remplacer la VimEnterligne 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
Vous voudrez peut-être ouvrir la session uniquement si aucun argument n'est fourni pour vim, par exemple. if argc() == 0 au VimEnter * nested :call LoadSession() end
0xc0de
Merci @ 0xc0de, excellente suggestion (j'ai même commencé à l'utiliser moi-même). J'ai mis à jour la réponse.
mathielo
comment pourrais-je modifier cela afin que si j'ouvre vim avec des arguments, il ne sauvegarde pas non plus cette session
Dr Manhattan
très bien, mais «exe» source «b: sessionfile» a besoin d'un point là-bas? et le problème est que la session de chargement automatique dépend du répertoire personnel actuel (get by pwd) comment puis-je le définir comme le dernier répertoire de travail avant de quitter vim? pour qu'il puisse charger la dernière session de travail plutôt que la session en dessous ~/?
van abel
Si vous voulez pouvoir avoir des sessions mais toujours ouvrir des fichiers uniques dans le répertoire sans l'écraser, consultez ma version modifiée de cela dans la réponse séparée: stackoverflow.com/questions/1642611/…
PMunch
6
Il existe 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 également une interface très simple.
Je l'utilise depuis quelques jours et jusqu'à présent, il fonctionne parfaitement. J'espère que cela vous aide.
Comme c'est le premier hit sur Google pour moi (et probablement d'autres) pour savoir comment travailler avec des sessions dans Vim, j'ai décidé d'ajouter un peu à la réponse de @ mathielo sur la façon de rendre cela automatique.
J'aime son code, mais l'ajout de la solution "seulement si sans arguments" semblait un peu manquer. 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, il ouvrira toute session existante et écrasera les modifications apportées lorsque vous quitterez. Si Vim est ouvert avec des options, il ne créera une nouvelle session que s'il n'en existe pas, cela signifie que vous pouvez ouvrir des fichiers uniques dans un répertoire qui a une session sans l'écraser. Ensuite, vous pouvez ouvrir Vim sans options pour exécuter la session à la place. S'il n'existe pas de session, il en crée une nouvelle.
Je viens d'essayer votre solution publiée ci-dessus dans Neovim 0.2.2 et de placer votre extrait de code, $HOME/.vim/plugin/sessions.vimmais il n'enregistre pas les fichiers de session. ¯ \ _ (ツ) _ / ¯
ipatch
Ce fil, et en particulier le commentaire lié, pourrait aider: superuser.com/questions/404686/… Je l'ai dans mon .vimrc et cela fonctionne très bien.
PMunch
Je l'ai fait fonctionner, apparemment je dois quitter (n) vim pour que la session soit écrite insérer une mauvaise blague Merci encore pour le partage
ip
3
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é sa fonctionnalité dans mon .vimrcfichier comme ceci:
Maintenant, en mode normal, tapez simplement <leader>sset vous verrez une commande comme celle-ci
:SaveSession
Ajoutez maintenant le nom de votre session
:SaveSession namesession
et c'est tout.
Lorsque vous fermez Vim et que vous le rouvrez, faites-le
:OpenSession
et vous verrez votre session ouverte.
Il y a beaucoup d'autres configurations à ajouter dans votre .vimrcfichier 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
j'ai eu des problèmes spécifiques avec le plugin et les sessions Airline. Passer à l'utilisation d'Obsession a résolu les problèmes, c'était une découverte incroyable après des semaines de difficultés. Voir github.com/vim-airline/vim-airline/issues/…
icc97
1
Merci @mathielo Exemple suivant 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émarrera la session et vous n'avez pas à vous soucier d'enregistrer la session à chaque fois que vous fermez vim.
Si vous n'avez pas de session active .vimrc ne fera rien. Comme avant.
Voilà ce que je cherchais! Merci encore @mathielo!
Ci-dessous est la seule conf. cela a vraiment fonctionné pour moi. Je l'ai pris 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
Pour gérer plusieurs sessions (par répertoire / référentiel), je suis récemment passé du plugin vim-session à vim-workspace . Sa gestion de session est relativement simple et fonctionne plutôt bien.
man
pageRéponses:
Tu veux quelque chose comme
Ensuite, vous pourrez récupérer ce fichier vim et vous récupérerez votre ancienne session:
ou ouvrez vim avec l'option -S:
la source
Session.vim
. Donc, si vous ne souhaitez enregistrer qu'une seule session dans votre répertoire actuel, vous pouvez utiliser:mksession
ou à:mks
partir de vim pour enregistrer votre session actuelle et simplement l'vim -S
ouvrir.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.
la source
Notez que: mksession n'enregistrera pas les modifications apportées aux fichiers que vous avez créés. J'ai fait cette erreur de fermer 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 que j'avais apportées aux fichiers avaient disparu.
la source
:mksession
.:wqa
:xa
une frappe de moins. Yay!.vimrc
:vimrc au FocusLost * silent! wa
Cela enregistrera automatiquement chaque fois que le tampon perd le focus.Si vous utilisez NERDTree comme explorateur de fichiers / dash, je recommanderais le plugin 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.
la source
let g:nerdtree_tabs_open_on_gui_startup=0
etlet g:nerdtree_tabs_open_on_new_tab=0
faire fonctionner xolox / vim-session.Si vous souhaitez automatiser le processus sans utiliser de plugins, vous pouvez utiliser Go away et revenir du wiki Vim Tips .
Chaque fois que vous quittez Vim, il enregistre la session en cours
~/.vim/sessions
et la charge à nouveau une fois Vim 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.Modifiez simplement votre
~/.vimrc
fichier et ajoutez ce qui suit:Même pour un débutant, ce script est quelque peu 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.
MISE À JOUR: En ajoutant la suggestion de 0xc0de , vous pouvez remplacer la
VimEnter
ligne pour celles-ci si vous voulez que Vim charge la session uniquement si aucun argument n'est fourni :la source
if argc() == 0 au VimEnter * nested :call LoadSession() end
pwd
) comment puis-je le définir comme le dernier répertoire de travail avant de quitter vim? pour qu'il puisse charger la dernière session de travail plutôt que la session en dessous~/
?Il existe 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 également une interface très simple.
Je l'utilise depuis quelques jours et jusqu'à présent, il fonctionne parfaitement. J'espère que cela vous aide.
la source
Comme c'est le premier hit sur Google pour moi (et probablement d'autres) pour savoir comment travailler avec des sessions dans Vim, j'ai décidé d'ajouter un peu à la réponse de @ mathielo sur la façon de rendre cela automatique.
J'aime son code, mais l'ajout de la solution "seulement si sans arguments" semblait un peu manquer. Ceci est ma version modifiée:
Le changement notable ici est le remplacement facultatif. Si vous ouvrez Vim sans options, il ouvrira toute session existante et écrasera les modifications apportées lorsque vous quitterez. Si Vim est ouvert avec des options, il ne créera une nouvelle session que s'il n'en existe pas, cela signifie que vous pouvez ouvrir des fichiers uniques dans un répertoire qui a une session sans l'écraser. Ensuite, vous pouvez ouvrir Vim sans options pour exécuter la session à la place. S'il n'existe pas de session, il en crée une nouvelle.
la source
$HOME/.vim/plugin/sessions.vim
mais il n'enregistre pas les fichiers de session. ¯ \ _ (ツ) _ / ¯Il y a ce merveilleux plugin appelé vim-session . C'est très puissant. Pour l'installer:
J'ai mappé sa fonctionnalité dans mon
.vimrc
fichier comme ceci:Maintenant, en mode normal, tapez simplement
<leader>ss
et vous verrez une commande comme celle-ciAjoutez maintenant le nom de votre session
et c'est tout.
Lorsque vous fermez Vim et que vous le rouvrez, faites-le
et vous verrez votre session ouverte.
Il y a beaucoup d'autres configurations à ajouter dans votre
.vimrc
fichier voir la documentation pour des exemples:Il y a un bon tutoriel sur YouTube.
la source
Personnellement, je passe simplement le plugin Obsession de Tim Pope pour permettre de définir un
sessiondir
et éviter de taper le chemin:la source
Merci @mathielo Exemple suivant de @mathielo, j'ai ajouté la ligne ci-dessous à .vimrc pour enregistrer la session active (le cas échéant):
Si vous voulez mettre plus de lignes, vous devez utiliser endif:
Il vous suffit de sauvegarder une nouvelle session dans vim avec
et après avoir commencé
vim démarrera la session et vous n'avez pas à vous soucier d'enregistrer la session à chaque fois que vous fermez vim.
Si vous n'avez pas de session active .vimrc ne fera rien. Comme avant.
Voilà ce que je cherchais! Merci encore @mathielo!
la source
:q
au lieu de:bd
... Merci!Si vous prévoyez de n'avoir qu'une seule session pour le projet, faites-le
qui va créer un
Session.vim
fichier dans le répertoire courant, puis pour ouvrir la session (à partir du même répertoire):Si vous modifiez la session et souhaitez l'enregistrer:
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:
Pour l'ouvrir (à partir du même répertoire):
Sauvegarder la session:
Puisque les sessions sont enregistrées dans des fichiers cachés, pour les visualiser n'oubliez pas
-a
la source
Vous pouvez stocker la session où vous le souhaitez.
Ex:
Cela stocke la session dans le lecteur D.
Cela peut être ouvert en tapant
dans l'un des fichiers vim.
la source
Ci-dessous est la seule conf. cela a vraiment fonctionné pour moi. Je l'ai pris d' ici , où vous pouvez également prendre une version plus complète / complexe.
la source
Pour gérer plusieurs sessions (par répertoire / référentiel), je suis récemment passé du plugin vim-session à vim-workspace . Sa gestion de session est relativement simple et fonctionne plutôt bien.
la source