6.3 环境恢复
vim 的编辑环境保存与恢复是我一直想要的功能,我希望每当重新打开 vim 时恢复:已打开文件、光标位置、undo/redo、书签、子窗口、窗口大小、窗口位置、命令历史、buffer 列表、代码折叠。vim 文档说 viminfo 特性可以恢复书签、session 特性可以恢复书签外的其他项,所以,请确保你的 vim 支持这两个特性:
vim --version | grep mksession
vim --version | grep viminfo
如果编译 vim 时添加了 —with-features=huge 选项那就没问题。
一般说来,保存/恢复环境步骤如下。
第一步,保存所有文档:
:wa
第二步,借助 viminfo 和 session 保存当前环境:
:mksession! my.vim
:wviminfo! my.viminfo
第三步,退出 vim:
:qa
第四步,恢复环境,进入 vim 后执行:
:source my.vim
:rviminfo my.viminfo
具体能保存哪些项,可由 sessionoptions 指定,另外,前面几步可以设定快捷键,在 .vimrc 中增加:
" 设置环境保存项
set sessionoptions="blank,buffers,globals,localoptions,tabpages,sesdir,folds,help,options,resize,winpos,winsize"
" 保存 undo 历史
set undodir=~/.undo_history/
set undofile
" 保存快捷键
map <leader>ss :mksession! my.vim<cr> :wviminfo! my.viminfo<cr>
" 恢复快捷键
map <leader>rs :source my.vim<cr> :rviminfo my.viminfo<cr>
这样,简化第二步、第四步操作。另外,sessionoptions 无法包含 undo 历史,你得先得手工创建存放 undo 历史的目录(如,.undo_history/)再通过开启 undofile 进行单独设置,一旦开启,每次写文件时自动保存 undo 历史,下次加载在文件时自动恢复所有 undo 历史,不再由 :mksession/:wviminfo 和 :source/:rviminfo 控制。
按此操作,并不能像 vim 文档中描述的那样能保存所有环境,比如,书签、代码折叠、命令历史都无法恢复。这和我预期存在较大差距,暂且用用吧,找个时间再深入研究!