Vi / Vim恢复打开的文件

时间:2009-09-13 01:00:20

标签: vi vim

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

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

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

这可能吗?

更新:

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

例如:

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

提前致谢

9 个答案:

答案 0 :(得分:91)

您可以使用: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

答案 1 :(得分:10)

查看:mksession命令,创建session

  

会话保留所有人的视图   窗口,加上全局设置。   您可以保存会话以及何时保存   稍后将窗口布局恢复   看起来一样。您可以使用会话   快速切换不同   项目,自动加载   你最后在那里工作的文件   项目

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

Plugin 'xolox/vim-session'

到您的.vimrc,然后是:

:PluginInstall

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

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

答案 4 :(得分:1)

您可能对本书感兴趣:

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

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

此外,<cr>代表回车。

答案 5 :(得分:1)

SessionMan http://www.vim.org/scripts/script.php?script_id=2010 提供更简单的功能小心miniBufExplorer。它是不兼容的,除非您使用由andrew on vim_use创建的修改版本(即便如此,它只是中途兼容)

答案 6 :(得分: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>

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

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

答案 7 :(得分:0)

我建议使用vim-obsession。它比默认的mksession要好得多,因为它仍然可以保持你想做的事情。

答案 8 :(得分: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. 卸载所有当前加载的缓冲区。
  2.