50

我想知道这个常见的 IDE 功能是否可用。

假设我使用 Vim 打开许多文件,使用vsplitsplit. 然后,我关闭一切。

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

那可能吗?

更新:

使用mksession!source命令,在.vimrc文件中映射命令,有没有办法参数化映射以写入特定文件?

例如:

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

提前致谢

4

9 回答 9

106

您可以使用 :mksession 和 :source 映射到一组键,以便于保存和恢复。这是我的 .vimrc 中使用 F2 和 F3 的示例:

map <F2> :mksession! ~/vim_session <cr> " Quick write session with F2
map <F3> :source ~/vim_session <cr>     " And load session with F3
于 2009-09-13T01:07:35.917 回答
11

看一下:mksession命令,创建一个session

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

于 2009-09-13T01:04:16.143 回答
4

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

Plugin 'xolox/vim-session'

到您的 .vimrc,然后是:

:PluginInstall

此插件支持多个会话:您通过名称识别会话,然后使用该名称管理它。可以添加、删除、更新、列出会话...

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

于 2016-07-28T16:26:14.347 回答
2

您可以考虑使用GNU Screen。简而言之:它是一个命令行窗口管理器,允许用户在单个终端会话中访问多个单独的终端会话。对我来说主要优势是您可以分离会话,关闭终端窗口,然后重新附加会话,然后继续工作。

于 2009-09-17T20:46:21.100 回答
1

你可能对这本书感兴趣:

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

这是他们向您展示的最初几件事之一,作为 Vim 有多棒的一个例子。;)

此外,<cr>代表回车。

于 2009-09-13T03:33:40.253 回答
1

SessionMan http://www.vim.org/scripts/script.php?script_id=2010 提供了更简单的功能。小心使用 miniBufExplorer。除非您在 vim_use 上使用 andrew 制作的修改版本,否则它是不兼容的(即使那样,它也只是一半兼容)

于 2010-07-28T04:32:21.267 回答
1

我的解决方案如下,将它们放在 .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 <C-O> source ~/.session_
cnoremap <C-S> mksession! ~/.session_
nnoremap <silent> <C-S><C-S> :mksession! ~/.session_ <CR>

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

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

于 2011-01-16T14:18:01.280 回答
0

我建议使用vim-obsession。它比默认值要好得多,mksession因为它在你做你想做的事情的同时远离你。

于 2014-01-14T18:57:34.917 回答
0

基于 hgmnz 的回答并扩展更新。

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

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

在命令模式下你可以输入 % 然后按 tab 会展开到当前文件的绝对路径,你也可以输入 %: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. 卸载所有当前加载的缓冲区。
于 2015-04-23T08:02:33.180 回答