Vi / Vim恢复打开的文件
我想知道这个常见的IDEfunction是否可用。
假设我用Vim打开了许多文件,使用vsplit
和split
。 然后,我closures了一切。
第二天,我想恢复这些文件。 也就是说,恢复它们被打开的方式,而不必打开每一个(再次使用split
和vsplit
)。
那可能吗?
更新:
使用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窗口,然后重新连接会话,并继续工作。
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 )
- 卸载所有当前加载的缓冲区。