Vi / Vim恢复打开的文件

我想知道这个常见的IDEfunction是否可用。

假设我用Vim打开了许多文件,使用vsplitsplit 。 然后,我closures了一切。

第二天,我想恢复这些文件。 也就是说,恢复它们被打开的方式,而不必打开每一个(再次使用splitvsplit )。

那可能吗?

更新:

使用mksession!source命令,在.vimrc文件中映射命令,有没有一种方法来参数化映射,以便写一个特定的文件?

例如:

 map <F2> :mksession! ~/vim_session @INSERT_HERE<cr> "Save session to @INSERTHERE file 

提前致谢

您可以使用:mksession和:source来映射一组键,以便于保存和恢复。 下面是使用F2和F3的.vimrc中的一个例子:

 map <F2> :mksession! ~/vim_session <cr> " Quick write session with F2 map <F3> :source ~/vim_session <cr> " And load session with F3 

看看:mksession命令,创build一个session

会话保留所有窗口的视图,加上全局设置。 您可以保存会话,稍后恢复时,窗口布局看起来是一样的。 您可以使用会话在不同的项目之间快速切换,自动加载您上次在该项目中工作的文件。

你可以考虑使用GNU屏幕 。 简而言之:它是一个命令行窗口pipe理器,允许用户在单个terminal会话内访问多个单独的terminal会话。 我的主要优点是可以分离会话,closuresterminal窗口,然后重新连接会话,并继续工作。

你可能对这本书感兴趣:

http://www.swaroopch.com/notes/Vim#Download

这是他们首先向你展示Vim的一个例子。 ;)

另外, <cr>代表回车。

SessionMan http://www.vim.org/scripts/script.php?script_id=2010提供更简单的function。; 小心使用miniBufExplorer。 它是不兼容的,除非你使用由vim_use上的andrew修改的版本(即使如此,它只是一半兼容)

我的解决scheme如下,把它们放在.vimrc文件中。 HTH。

 " session related. " Default session is located `~/.session_'. The suffix `_' is a dirty " solution, just like the one-element tuple `(tuple_eliment,)' in Python.. cnoremap <CO> source ~/.session_ cnoremap <CS> mksession! ~/.session_ nnoremap <silent> <CS><CS> :mksession! ~/.session_ <CR> 

似乎更复杂,但如果您有多个会话来保存和加载非常有用。

PS
在这里,我采用熟悉的<Ctrl-S><Ctrl-O>快捷键来保存和加载会话。 恕我直言,这比伸出我的手更舒服的钥匙。 😉

我发现的最好的方法是使用vim会话插件, http://github.com/xolox/vim-session可以通过添加:;

 Plugin 'xolox/vim-session' 

到您的.vimrc,然后是:

 :PluginInstall 

该插件支持多个会话:按名称标识会话,然后使用该名称进行pipe理。 会话可以添加,删除,更新,列出,…

我已经使用了好几个月了, 强烈推荐。

我build议使用vim-obsession 。 它比默认的mksession好得多,因为它保持mksession你的状态,而仍然按照你的意愿去做。

根据hgmnz的回答和扩大更新。

您可以从映射中删除<cr> ,这将使您进入命令模式来完成命令。

 map <F2> :mksession! ~/<will stop here and you can type> 

当进入命令模式时,你可以input%,然后按Tab键,它会扩展到当前文件的绝对path,你也可以input%:p:h,然后按tab键来扩展到当前文件的目录。

您也可以将每个会话保存到工作目录,并且通过使用本地缓冲区目录,可以为工作目录设置多个会话。

 map <F2> :mksession! ./.vim_sessions <cr> " Will save session to current buffers directory. map <F3> :source ./.vim_sessions <cr> :lcd " Changes the current's buffer directory 

还要小心重新加载会话,因为它会卸载所有当前加载的缓冲区( http://vimdoc.sourceforge.net/htmldoc/starting.html#%3Amksession

  1. 卸载所有当前加载的缓冲区。