Vim 会话、书签与标记:保存工作现场
更新时间:2026-08-30。本文是
languages/vim/主题高手层第 8 篇(A2:PlantUML + 机制 + ≥2 实测 + ≥2 交叉引用)。
本文要回答的问题
- 怎么把"当前开了哪些文件、窗口怎么分"存下来,下次恢复?
- mark 是什么?和会话有什么区别?
- 远程 SSH 断了,怎么不丢编辑现场?
一、机制:session 是"窗口与缓冲区的快照"
:mksession 把当前 Vim 的布局状态(打开了哪些 buffer、窗口怎么分、光标在哪、哪些折叠合着)写进一个 Vim 脚本文件。下次 :source 它,现场完全还原。
二、session 实战
vim
:mksession! ~/proj.session.vim " 存现场(! 覆盖)
:source ~/proj.session.vim " 恢复可写进配置自动存:autocmd VimLeave * mksession! ~/.vim/last.session。
三、mark:文件内的精确书签
session 管"跨文件布局",mark 管"文件内某个位置":
| 命令 | 作用 |
|---|---|
ma | 在光标处设名为 a 的标记 |
'a | 跳到 a 标记所在行行首 |
`a | 跳到 a 标记精确位置 |
:marks | 列出所有标记 |
小写 a-z 是文件内标记;大写 A-Z 是跨文件全局标记(即使关了文件再开也能跳回)。
四、区别与配合
| 维度 | session | mark |
|---|---|---|
| 范围 | 跨文件、整个布局 | 单文件内/跨文件一个点 |
| 持久 | 存成文件 | 默认随 buffer(全局标记可持久) |
| 用途 | 恢复"我在干什么" | 记住"某处重要" |
实战:用 session 恢复"在改 nginx + 看 error.log 的分屏",用 mA 记住 error.log 里关键报错行,下次直接 'A 跳回。
五、与金字塔衔接
一句话总结
:mksession 保存整个编辑现场(文件+窗口+光标),:source 还原;ma 设文件内标记、'a 跳转;session 管"在干什么"、mark 管"某处重要"——SSH 断线也不丢上下文。
上一篇:Vim 自动命令深挖 下一篇:Vim 寄存器回顾