欢迎光临散文网 会员登陆 & 注册

oeasy教您玩转vim - 75 - # 组合键映射map

2021-12-29 08:11 作者:oeasy  | 我要投稿

会话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就包括下列选项options

    • blnak 空白窗口

    • 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

    • 如果sesdircurdir都没有的话

    • slash

    • 在从 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

    • 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

  • 不过最后一段他说

    • viewsession 都是 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 蓝桥云课)


oeasy教您玩转vim - 75 - # 组合键映射map的评论 (共 条)

分享到微博请遵守国家法律