会话session
回忆组合键映射的细节
-
上次我们定义了一系列的复合键
- 主要是和ctrl键一起
-
快速跳转window窗口
map <c-j> <c-w>jmap <c-k> <c-w>kmap <c-h> <c-w>hmap <c-l> <c-w>l
-
快速跳转tab选项卡
map <c-left> :tabn<cr>map <c-right> :tabp<cr>
-
还可以流水作业
map <c-s> :%s/5.1/5.2/g<cR>:wnext<cr>
-
最后要注意注释说明的小细节
:unmap a|" unmap a
-
组合键和功能键Fn一样
- 都可以做各种映射map
- 映射map和缩写abbreviate和折叠、本地options一样
- 都可以通过
:mkview、:loadview来保存读取 - 但是如果我的环境里面有tab选项卡
- tab选项卡里面还有各种切分好的各个窗口
- 一觉醒来还得重新切分
- 还得重新
:tabnew
- 我想把这个多选项卡tabs多窗口windows的状态整个存储起来
- 可能么?🤔
寻找过程
-
如果有这个功能的话- 一定是在
:mkview附近 - 我们先去现场转转
- 一定是在
:h mkview
-
view里面的可以包括- 参数列表
:args - 当前文件
-
viewoptions- 映射 map
- 缩写 abbreivate
- options
- 折叠
- 滚动位置和光标位置
- 当前文件夹
- 参数列表
- 和
viewoption相关的有一个sessionoptions - <c-]> 进去看看
sessionoptions会话选项
-
这个会话
session就包括下列选项optionsblnak空白窗口buffers所有缓存curdir当前目录folds折叠globals全局变量localoptions本地选项
- 还家伙,这不基本就把
:mkview的活儿都干了么 - 只要
sessionoptions有以上这些 :mksession就可以完成:mkview的工作- 除此之外,session中还有什么
sessionoptions会话选项
-
可以给
sessionoptions添加更多选项:set sessionoptions+=resizeoptions所有的选项option和 映射mapresize窗口的行和列sesdirsession会话文件所在的目录- 这个文件夹会成为当前目录
curdir -
如果
sesdir、curdir都没有的话- 会使用绝对路径
absolute path
- 会使用绝对路径
-
slashunix文件名里面的反斜杠会变成斜杠
- 在从
windows到unixlike有用 tabpages选项卡页面terminal终端存储的命令winpos、winsize窗口window的大小和位置
- 这啥都有了
- 从
tabs到window - 完全满足需求
保存会话: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
- buffers
- window
- 全都有
- 总共1000+行
- 把当前的状态全保存起来了
-
想恢复的时候只要
:so[urce] session.vim- 就都恢复了
切换项目工作区
- 可以建立两个session
- 然后把复制oeasyvim出来叫oeasy
-
这样我们就有两个工作文件夹了
- 比如 oeasyvim 是我们不想做的任务A
- oeasy是我们想做的任务B
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
- 可以在指定位置
-
优点
- 各个工程集中管理
- 也可以设定这些session文件
-
其实还有其他方法避免session文件出现在git提交的工程目录里面
- 用.gitignore可解决这个问题
-
缺点
- 删除一个工程要在两个地方删除
- 工程程序素材和工程工作区不在一起复制粘贴麻烦
功能键映射
-
我想让F2能执行
:mksession的任务:map <F2> :mks!<cr>
-
我想先保存文件再保存工作区
:map <F2> :wa<Bar>mks!<cr>
-
我想先保存文件再保存工作区到当前session文件
:map <F2> :wa<Bar>exe "mksession! " . v:this_session<cr>- 其中v:this_session是当前的session
- 可以
:echo v:this_session
-
想要加载session的时候
:source ~/oeasy/oeasy.vim也可以指定一个功能键:map <F3> :source ~/oeasy/oeasy.vim<cr>
-
当F3的时候
- 这会话session就被保存住了
- 而这两个map映射也就保存到了这个session里面
view和session
-
先后次序
- vim肯定是先有的
:mkview保存窗口视图 - 后有的
:mksession保存整个会话 - 这说明vim功能变的更强大
- 更适合多线程并发的环境
- vim肯定是先有的
-
两者关系
- 单tab选项卡单window窗口的工程可以用
:mkview - 多tab选项卡多window窗口的工程最好用
:mksession :mksession可替代:mkview
- 单tab选项卡单window窗口的工程可以用
-
不过最后一段他说
view和session都是viminfo的有益补充??!- 几个意思?
- 我们还是先总结一下
Session
总结
-
这次我们定义了
session:mks
-
还可以加载会话
session:source Session.vimvim -S Session.vim
- 基本上确立
:mksession可以替代:mkview - 谁知又出来一个
viminfo?!😨 - 上面这哥俩儿都成了有益补充?
- 什么情况?🤔
- 下次再说!
[Github地址] (







浙公网安备 33010602011771号