根据我在Vim的任务,我有几个选项卡打开。
如何保存不同的会话以供以后使用?
根据我在Vim的任务,我有几个选项卡打开。
如何保存不同的会话以供以后使用?
当前回答
为了管理多个会话(在每个目录/回购的基础上),我最近从vim-session插件切换到vim-workspace。它的会话管理相对简单,工作得很好。
其他回答
如果你想在不使用任何插件的情况下自动化这个过程,你可以使用Go away,然后从Vim Tips Wiki返回。
每次退出Vim时,它都会将当前会话保存在~/下。vim/会话,并在打开vim后再次加载它。它也基于您当前的路径,因此如果您从不同的目录打开Vim,您将有不同的会话,这在处理不同的项目时非常有用。
只需编辑~/。Vimrc文件,并添加以下内容:
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()
即使对于初学者来说,这个脚本也很容易理解和定制。
请注意,此脚本仅适用于Unix系统(MacOS/Linux),需要在Windows上进行调整。
更新:添加0xc0de的建议,如果你想让Vim只在没有提供参数的情况下加载会话,你可以替换这些VimEnter行:
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
你想要的是
:mksession ~/mysession.vim
然后你可以源vim文件,你会有你的旧会话回来:
:source ~/mysession.vim
或者使用-S选项打开vim:
$ vim -S ~/mysession.vim
您可能希望在vimrc中设置这些会话选项。特别是当您在保存会话之后更改了vimrc时,选项非常烦人。
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
如果你计划只有一个阶段的项目,那就这样做
:mks
这将创建一个Session。Vim文件在当前目录,然后打开会话(从同一目录):
vim -S
如果您更改会话并想要保存它:
:mks!
这将保存会话,而不是文件本身!
如果你计划有多个会话,我更喜欢将它们保存在项目目录中的隐藏文件中:
:mks .session-name.vim
打开它(从同一目录):
vim -S .session-name.vim
保存会话:
:mks! .session-name.vim
由于会话保存在隐藏文件中,要查看它们不要忘记-a
ls -a
如果你使用NERDTree作为文件资源管理器/dash,我推荐xolox/vim-session插件,而不是内置的:mksession命令。由于某种原因,:mksession无法恢复NERDTree缓冲区。你的观点可能不同,但我想分享一下我的经验。