如何在退出时自动保存vim会话并在启动时自动重新加载包括拆分窗口状态?

gan*_*jan 23 vim session configuration

我喜欢将我的vim屏幕拆分为3. one:vsplit和one:split.当我关闭vim时,我想要保存这些窗口和我工作的文件.我也希望这些窗口在我启动vim时自动加载.

我试图安装gsessions(刚刚将文件添加到插件文件夹中),但没有任何事情发生.我是vim的新手,所以我不确切知道配置是如何工作的.

Wol*_*lph 21

我稍微修改了2ck的脚本,以便.session.vim在当前工作目录中保存,而不是当前打开文件所在的目录.

此外,它会在采购之前检查文件是否存在.

fu! SaveSess()
    execute 'mksession! ' . getcwd() . '/.session.vim'
endfunction

fu! RestoreSess()
if filereadable(getcwd() . '/.session.vim')
    execute 'so ' . getcwd() . '/.session.vim'
    if bufexists(1)
        for l in range(1, bufnr('$'))
            if bufwinnr(l) == -1
                exec 'sbuffer ' . l
            endif
        endfor
    endif
endif
endfunction

autocmd VimLeave * call SaveSess()
autocmd VimEnter * nested call RestoreSess()
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢"语法"......但也许它不属于这里? (4认同)

mar*_*rkw 18

您可以使用这个目录进行会话,这是您的vimrc:

fu! SaveSess()
    execute 'call mkdir(%:p:h/.vim)'
    execute 'mksession! %:p:h/.vim/session.vim'
endfunction

fu! RestoreSess()
execute 'so %:p:h/.vim/session.vim'
if bufexists(1)
    for l in range(1, bufnr('$'))
        if bufwinnr(l) == -1
            exec 'sbuffer ' . l
        endif
    endfor
endif
endfunction

autocmd VimLeave * call SaveSess()
autocmd VimEnter * call RestoreSess()
Run Code Online (Sandbox Code Playgroud)

这将使用.vim s乱丢您的目录,但您可以轻松修改它.此外,如果您不想为每个文件添加新窗口并添加ssop-=buffers到您的vimrc ,请将sbuffer更改为badd .


Cir*_*四事件 7

xolox/vim-session对我来说效果很好。使用 Vundle:

Plugin 'xolox/vim-misc'
Plugin 'xolox/vim-session'
let g:session_autoload = 'yes'
let g:session_autosave = 'yes'
let g:session_autosave_to = 'default'
let g:session_verbose_messages = 0
Run Code Online (Sandbox Code Playgroud)

会话存储在~/.vim/sessions/default.vim.


Jac*_*hal 6

autosess插件可以很好地用于此。也可以在 GitHub 上找到:powerman/vim-plugin-autosess

从插件的描述:

不带文件参数启动 Vim 以自动加载当前目录的前一个会话。这使得复杂项目的工作更容易 - 只需 chdir 到项目目录并启动vim

当您退出 Vim 时,如果打开的选项卡/窗口不止一个,会话将被自动保存。这使您可以编辑同一目录中的单个文件,而不会破坏您保存的会话。(Quickfix 和 vimdiff 的窗口被忽略。)

如果在没有打开文件的情况下退出 Vim,会话将被删除。这让你下次在这个目录中启动通常的空 Vim。