如何定期保存Vim会话?解决意外场景下的会话恢复问题
解决Vim 8.0.1839定期自动保存会话的问题
我来帮你搞定这个自动保存会话的需求!你之前尝试的代码有几个小细节不符合Vim脚本的语法规范,导致在8.0版本里无法生效,咱们直接上修正后的配置,再逐个解释问题点:
修正后的完整配置
function! SaveSession(timer) mksession! session.vim endfunction let g:session_timer = timer_start(2000, 'SaveSession', {'repeat': -1})
为什么之前的代码不生效?
我帮你拆解几个关键问题:
- 函数定义缺少
!:在Vim脚本中,定义全局函数需要用function!(带感叹号),旧版本Vim对这个语法要求更严格,省略的话可能导致函数无法被正确识别。 - 命令前多余的冒号:在函数内部执行Vim原生命令时,不需要加前缀
:,直接写mksession! session.vim即可。 - 字典语法错误:
timer_start的第三个参数是配置字典,Vim脚本里字典的键值对必须用:分隔,你之前写的{'repeat', -1}是错误的,要改成{'repeat': -1}才能让定时器重复执行。 - 变量作用域问题:把定时器变量存在全局命名空间
g:下(比如g:session_timer),之后如果想手动停止定时器,直接执行call timer_stop(g:session_timer)就可以,避免变量被局部环境覆盖。
额外实用建议
- 固定会话文件路径:当前配置会把
session.vim保存在Vim启动的工作目录里,如果想统一保存到固定位置(比如Vim配置目录),可以改成:mksession! ~/.vim/auto_save_session.vim - 检查Vim特性支持:确保你的Vim编译时包含了
+timer特性(官方预编译版本一般都有),可以在Vim里输入:version查看特性列表。 - 快速恢复会话:下次启动Vim时,直接执行
source ~/.vim/auto_save_session.vim就能恢复会话,或者用命令行启动:vim -S ~/.vim/auto_save_session.vim。
内容的提问来源于stack exchange,提问作者ezdazuzena
相关产品推荐
相关产品推荐

