根据我在Vim的任务,我有几个选项卡打开。

如何保存不同的会话以供以后使用?


当前回答

如果你使用NERDTree作为文件资源管理器/dash,我推荐xolox/vim-session插件,而不是内置的:mksession命令。由于某种原因,:mksession无法恢复NERDTree缓冲区。你的观点可能不同,但我想分享一下我的经验。

其他回答

你可以把会话存储在任何你想要的地方。

Ex:

:mksession! D:/session.ses

这将会话存储在D驱动器中。

这可以通过输入打开

:so D:/session.ses

在任何vim文件中。

如果你想在不使用任何插件的情况下自动化这个过程,你可以使用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

有一个叫vim-session的插件。它非常强大。安装方法:

cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git

我在我的.vimrc文件中映射了它的功能,就像这样:

nnoremap <leader>so :OpenSession 
nnoremap <leader>ss :SaveSession 
nnoremap <leader>sd :DeleteSession<CR>
nnoremap <leader>sc :CloseSession<CR>

现在在正常模式下输入<leader>ss,你会看到这样的命令

:SaveSession 

现在添加会话的名称

 :SaveSession namesession

就这些。

当你关闭Vim并重新打开它时,就这么做

 :OpenSession

你会看到你的会议开始了。

在你的.vimrc文件中还有很多其他的配置需要添加,参见文档中的例子:

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

YouTube上有一个很好的教程。

你想要的是

:mksession ~/mysession.vim

然后你可以源vim文件,你会有你的旧会话回来:

:source ~/mysession.vim

或者使用-S选项打开vim:

$ vim -S ~/mysession.vim

由于@mathielo 下面是来自@mathielo的例子,我在.vimrc中添加了下面的行来保存活动会话(如果有的话):

au VimLeave * if this_session != "" | exe "mksession! ".this_session

如果你想放更多的行,你需要使用endif:

au VimLeave * if v:this_session != ""
au VimLeave *   exe "mksession! ".this_session
au VimLeave * endif

您只需要在vim with中保存一个新会话

:mks [Session filename]

开始之后

$ vim -S [Session filename]

Vim将启动会话,您不必担心每次关闭Vim时都要保存会话。

如果没有活动会话,vimrc将不会做任何事情。像以前一样。

这就是我要找的!再次感谢@mathielo!