如何在退出/重启Vim时自动保存并加载临时缓冲区?
Vim 实现类Notepad++无手动保存自动持久化多标签笔记功能
完全可以通过配置或插件实现和Notepad++一致的体验,不需要每次手动执行保存命令,退出后下次启动自动还原所有标签页、未写完的内容。
纯内置配置方案(无插件依赖)
Vim原生自带的会话、viminfo(Neovim对应为shada)能力组合后可以实现基础效果,适合不想装插件的用户,把以下配置写入你的vimrc(Neovim对应为init.vim)即可:
" 允许切换标签/关闭窗口时保留未保存的缓冲区,不会弹出强制保存提示 set hidden " 调整viminfo存储规则:标记最多存1000个文件、开启文件路径存储、单缓冲区最多存1000行内容、指定viminfo存储路径 set viminfo='1000,f1,<1000,n~/.vim/viminfo " 退出Vim前自动静默保存所有缓冲区状态 autocmd VimLeavePre * :silent! wall " 启动Vim时静默加载上次留存的所有缓冲区、标签状态 autocmd VimEnter * :silent! rshada | :silent! bufdo e
注意:该方案单条笔记内容超过你设置的
<后接的行数阈值时会被截断,仅适合短笔记场景,不会持久化无文件名的超长文本。
插件方案(1:1复刻Notepad++体验,推荐)
用会话管理插件可以完美实现无感知自动持久化,不会有内容长度限制,还能保留光标位置、窗口布局、折叠状态等细节。
- 先添加基础会话配置到vimrc:
" 调整会话存储范围,包含缓冲区、标签页、窗口尺寸、缓冲区本地配置,移除容易冲突的全局选项 set sessionoptions-=options set sessionoptions+=buffers,tabpages,winsize,localoptions " 指定会话文件存储目录,提前手动创建对应目录即可 set sessiondir=~/.vim/sessions/
- 按需选择会话插件安装配置即可:
- 通用Vim/Neovim环境推荐用
vim-session,追加两行配置就完成所有设置:let g:session_autosave = 1 " 退出Vim时自动保存当前所有状态,包括未命名、未手动保存的标签内容 let g:session_autoload = 1 " 启动Vim时如果没有指定打开特定文件,自动加载上次退出的会话 - Neovim用户也可以选择
auto-session,支持更细粒度的规则配置,比如临时打开单个代码文件时自动跳过笔记会话加载,不会混淆工作场景。 - 如果只需要临时笔记场景的持久化,可以选更轻量的
scratch.vim,所有新建的临时草稿标签内容会自动持久化到本地磁盘,不需要依赖会话机制。
配置完成后即可实现和Notepad++完全一致的使用逻辑:打开新标签直接输入内容,不需要执行保存命令,直接关闭Vim,下次启动时所有内容、标签顺序、光标位置都会完整还原。
内容的提问来源于stack exchange,提问作者rlegendi
相关产品推荐
相关产品推荐

