在Gvim中自动恢复上一个会话

时间:2011-10-22 09:31:08

标签: session vim

我安装了sessionman,它运行正常。但是当我重新加载X会话两次(注销/登录,重启等)时会丢失会话,因为当KDE恢复Gvim时,它不会自动加载会话,而只会加载最后一个文件,然后在下次重新加载时将其保存在最后一个会话名称下。如果我没有运行SessionOpen,那么在下次重新加载时,我的上一个会话就会丢失。

我已经配置了会话自动保存。如果Gvim也可以自动加载上一个会话,那将是很好的。但是,即使手动,此功能也不适用于我。当我重新启动Gvim时,SessionShowLast打印出“上一个会话未定义,当前会话为”“”。

sessionman文档说:“打开的会话的名称保存在g:LAST_SESSION变量中,如果'viminfo'选项包含'!',则保存在viminfo文件中。但是我没有找到任何明确的解释是什么是“viminfo选项”,它应该包含'!',以及如何设置它。另外我不确定如何从vimrc执行SessionOpenLast。

如果我试图解决问题的方式是错误的,请纠正我。

2 个答案:

答案 0 :(得分:6)

viminfo是一个变量,用于描述应在viminfo文件中存储哪些数据。

有关完整详细信息,请在:help 'viminfo'中运行vim(注意引号):

    !       When included, save and restore global variables that start
            with an uppercase letter, and don't contain a lowercase
            letter.  Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
            and "_K_L_M" are not.  Nested List and Dict items may not be
            read back correctly, you end up with a string representation
            instead.                                

使用:set viminfo查看viminfo设置的当前值。在~/.vimrc文件中修改它。

set viminfo='100,<500,s10,h,!

由于在插件之前加载vimrc,因此将SessionOpenLast添加到vimrc将无效。要解决此问题,请创建一个自动命令:

autocmd VimEnter * SessionOpenLast

答案 1 :(得分:1)

  "My Sessionman Conf
  set viminfo='100,<500,s10,h,!
  let sessionman_save_on_exit = 1

  function! ReadSession()
  SessionOpenLast
  endfunction

  " if no file args then open the last session
  autocmd VimEnter * if argc() == 0 | call ReadSession() | endif