Vim 会话session详解

回忆组合键映射的细节

寻找过程

  • 如果 有这个功能的话
    • 一定是在:mkview附近
    • 我们先去现场转转
  • :h mkview

图片描述

  • view 里面的可以包括
    • 参数列表 :args
    • 当前文件
    • viewoptions
      • 映射 map
      • 缩写 abbreivate
      • options
    • 折叠
    • 滚动位置和光标位置
    • 当前文件夹
  • viewoption相关的有一个sessionoptions
  • <c-]> 进去看看

sessionoptions会话选项

图片描述

  • 这个会话session就包括下列选项options
    • blnak 空白窗口
    • buffers 所有缓存
    • curdir 当前目录
    • folds 折叠
    • globals 全局变量
    • localoptions 本地选项
  • 还家伙,这不基本就把:mkview的活儿都干了么
  • 只要sessionoptions有以上这些
  • :mksession就可以完成:mkview的工作
  • 除此之外,还有

sessionoptions会话选项

  • 可以给 sessionoptions 添加更多选项
    • :set sessionoptions+=resize
    • options 所有的选项option 和 映射map
    • resize 窗口的行和列
    • sesdir session会话文件所在的目录
    • 这个文件夹会成为当前目录curdir
    • 如果sesdircurdir都没有的话
      • 会使用绝对路径absolute path
    • slash
      • unix 文件名里面的反斜杠会变成斜杠
    • 在从 windowsunixlike 有用
    • tabpages 选项卡页面
    • terminal 终端存储的命令
    • winposwinsize 窗口window的大小和位置

图片描述

  • 这啥都有了
  • tabswindow
  • 完全满足需求

保存会话:mksession

  • :mksession 保存会话
  • 存到哪里了呢?

图片描述

  • :echo this_session
    • 回答是保存在了当前目录
    • 叫做session.vim
    • 这个就很像在项目的根目录保存了一个工作区
  • 我们去看看这个东西是什么?

会话内容Session

   git clone http://gitee.com/overmind1980/oeasyvim.git`
   vi -o oeasy.java oeasy.css oeasy.html
  • 然后再建立一些tabs
  • :mks[ession]

图片描述

  • 可以看到这个在SessionOption里面的
    • tab
    • window
    • buffers
    • 全都有
  • 总共1000+行
  • 把当前的状态全保存起来了
  • 想恢复的时候只要
    • :so[urce] session.vim
    • 就都恢复了

切换项目工作区

  • 然后把复制oeasyvim出来叫oeasy
    • oeasyvim 是我们不想做的任务
    • oeasy是我们想做的任务
  • 可以建立两个session
   cd ..
   cp oeasyvim oeasy
   cd oeasy
   vi -o oeasy.java oeasy.css oeasy.html
  • 再加上一些tab选项卡之类
    • :mksession
    • 这次在oeasy这个工程文件夹底下建立了Session.vim
    • 我们可以看到这两个项目
    • 各有各的工程文件
    • 也就是各有各的蓝布棉门帘
    • 甚至可以把这个工作区状态分享到网上
  • 别人就用你的布局方式打开你的工程
    • vim -S Session.vim
  • 或者进入vim后
    • :source Session.vim
  • 也可以给同一个工程制作不同方面的切面会话

项目工作区文件夹./sessions

  • :mks ~/sessions/oeasy.session
    • 可以在指定位置~/session下建立工程目录
    • 所有的工程文件都存在工程目录里
      • ~/sessions/oeasy.session
      • ~/sessions/o2z.session
      • ~/sessions/o3z.session
    • 这样的话我可以直接去工程目录里面找工程
      • ls ~/sessions/
      • vim -S ~/sessions/oeasy.session
  • 优点
    • 工程集中管理
    • 避免出现在工程目录里面
    • 可能进入git
      • 当然用.gitignore可解决这个问题
  • 缺点
    • 删除一个工程要在两个地方删除
    • 工程程序素材和工程工作区不在一起复制粘贴麻烦

功能键映射

  • 我想让F2能执行:mksession的任务
    • :map <F2> :mks<cr>
  • 我想先保存文件再保存工作区
    • :map <F2> :wa<Bar>exe "mksession!"
  • 我想先保存文件再保存工作区到当前session文件
    • :map <F2> :wa<Bar>exe "mksession! " . v:this_session<cr>

图片描述

  • 想要加载session的时候
    • :map <F3> :source ~/oeasy/oeasy.vim<cr>
  • F3的时候
    • 这会话session就被保存住了
    • 而这两个映射也就保存到了这个session里面

view和session

图片描述

  • 先后次序
    • vim肯定是先有的:mkview 保存窗口视图
    • 后有的:mksession 保存整个会话
    • 这说明vim功能变的更强大
    • 更适合多线程并发的环境
  • 两者关系
    • 单tab选项卡单window窗口的工程可以用:mkview
    • 多tab选项卡多window窗口的工程最好用:mksession
    • :mksession 可替代 :mkview
  • 不过最后一段他说
    • viewsession 都是 viminfo 的有益补充??!
    • 几个意思?
  • 我们还是先总结一下 Session

总结

  • 这次我们定义了session
    • :mks
  • 还可以加载会话session
    • :source Session.vim
    • vim -S Session.vim
  • 基本上确立:mks可以替代:mkview
  • 谁知又出来一个viminfo?!😨
  • 上面这哥俩儿都成了有益补充?
  • 什么情况?🤔
  • 下次再说!

教程来源于Github,感谢overmind1980大佬的无私奉献,致敬!

技术教程推荐

面试现场 -〔白海飞〕

Flutter核心技术与实战 -〔陈航〕

说透中台 -〔王健〕

互联网人的英语私教课 -〔陈亦峰〕

Spark核心原理与实战 -〔王磊〕

流程型组织15讲 -〔蒋伟良〕

Go 语言项目开发实战 -〔孔令飞〕

朱涛 · Kotlin编程第一课 -〔朱涛〕

手把手带你写一个 MiniTomcat -〔郭屹〕