oeasy教您玩转vim - 75 - # 组合键映射map
会话session
回忆组合键映射的细节
上次我们定义了一系列的复合键
主要是和ctrl键一起
快速跳转window窗口
map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-h> <c-w>h
map <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
里面的可以包括映射 map
缩写 abbreivate
options
参数列表
:args
当前文件
viewoptions
折叠
滚动位置和光标位置
当前文件夹
和
viewoption
相关的有一个sessionoptions
<c-]> 进去看看
sessionoptions
会话选项

这个会话
session
就包括下列选项optionsblnak
空白窗口buffers
所有缓存curdir
当前目录folds
折叠globals
全局变量localoptions
本地选项还家伙,这不基本就把
:mkview
的活儿都干了么只要
sessionoptions
有以上这些:mksession
就可以完成:mkview
的工作除此之外,session中还有什么
sessionoptions
会话选项
可以给
sessionoptions
添加更多选项unix
文件名里面的反斜杠会变成斜杠会使用绝对路径
absolute path
:set sessionoptions+=resize
options
所有的选项option
和 映射map
resize
窗口的行和列sesdir
session会话文件所在的目录这个文件夹会成为当前目录
curdir
如果
sesdir
、curdir
都没有的话slash
在从
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
ls ~/sessions/
vim -S ~/sessions/oeasy.session
~/sessions/oeasy.session
~/sessions/o2z.session
~/sessions/o3z.session
可以在指定位置
~/session
下建立工程目录所有的工程文件都存在工程目录里
这样的话我可以直接去工程目录里面找工程
优点
用.gitignore可解决这个问题
各个工程集中管理
也可以设定这些session文件
其实还有其他方法避免session文件出现在git提交的工程目录里面
缺点
删除一个工程要在两个地方删除
工程程序素材和工程工作区不在一起复制粘贴麻烦
功能键映射
我想让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功能变的更强大
更适合多线程并发的环境
两者关系
单tab选项卡单window窗口的工程可以用
:mkview
多tab选项卡多window窗口的工程最好用
:mksession
:mksession
可替代:mkview
不过最后一段他说
view
和session
都是viminfo
的有益补充??!几个意思?
我们还是先总结一下
Session
总结
这次我们定义了
session
:mks
还可以加载会话
session
:source Session.vim
vim -S Session.vim
基本上确立
:mksession
可以替代:mkview
谁知又出来一个
viminfo
?!😨上面这哥俩儿都成了有益补充?
什么情况?🤔
下次再说!
[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (overmind1980/oeasyvim)
[蓝桥实验楼 邀请码FJWYIMGB] (oeasy 教您零基础玩转编辑神器 Vim_Linux 蓝桥云课)