会话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 里面的可以包括

    • 参数列表 :args
    • 当前文件
    • viewoptions

      • 映射 map
      • 缩写 abbreivate
      • options
    • 折叠
    • 滚动位置和光标位置
    • 当前文件夹
  • viewoption相关的有一个sessionoptions
  • <c-]> 进去看看

sessionoptions会话选项

  • 这个会话session就包括下列选项options

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

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
    • 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功能变的更强大
    • 更适合多线程并发的环境
  • 两者关系

    • 单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地址] (GitHub - overmind1980/oeasyvim: 这是oeasy制作的的一套关于vim的教程 可以在 https://www.lanqiao.cn/teacher/courses/2840 做实验 邀请码FJWYIMGB 本教程从0基础开始,到精通vim配置,和高级命令。希望能让vim是你的开发更高效。)

[Gitee地址] (overmind1980/oeasyvim)

[蓝桥实验楼 邀请码FJWYIMGB] (oeasy 教您零基础玩转编辑神器 vim_Linux - 蓝桥云课)

oeasy教您玩转vim - 76 - # Session会话的更多相关文章

  1. oeasy教您玩转vim - 56 - # 字符可视化模式

    ​ 可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...

  2. oeasy教您玩转vim - 57 - # 行可视化

    ​ 可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...

  3. oeasy教您玩转vim - 53 - # 批量替换

    查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...

  4. oeasy教您玩转linux010203显示logo

    我们来回顾一下 上一部分我们都讲了什么?

  5. oeasy 教您玩转linux010101查看内核uname

    linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...

  6. oeasy教您玩转linux010202软件包管理apt

    顾一下 上一部分我们都讲了什么?

  7. oeasy教您玩转linux010201持续输出yes

    我们来回顾一下 上一部分我们都讲了什么?

  8. oeasy教您玩转linux010108到底哪个which

    到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?

  9. oeasy教您玩转python - 006 - # hello world

    ​ Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...

  10. oeasy教您玩转linux-010110内容回顾

    我们来回顾一下 我们都讲了什么?

随机推荐

  1. dpkg和rpm对比及常用命令

    dpkg(Debian Package)和rpm(RPM Package Manager)是两种不同的Linux包管理工具,它们各自在特定的Linux发行版中占据核心地位.两者之间对比如下: 所属发行 ...

  2. 网络广告代理商是如何通过Cookie收集用户信息的

    更多博文请关注:https://blog.bigcoder.cn 不知道大家有没有这样的经历,我在某宝上搜索一个商品,然后再打开其它网站,它会非常"智能"的给我推荐同一商品. 这样 ...

  3. Vue——基本使用

    Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统.我们不再和 HTML 直接交互了.一个 Vue 应用会将其挂载到一个 DOM 元素上 (对于这个例子是 #app ...

  4. 文件系统(五):exFAT 文件系统原理详解

    前言 exFAT是微软2006年推出的一种文件系统,距今已快二十年,相比于FAT16和FAT32,exFAT还是算年轻.exFAT一直是微软的一个专用文件系统,直到2019年微软发布它的规范,目前微软 ...

  5. 申请并部署免费的 SSL/TLS 证书

    对于囊中羞涩的我们来说,只要能白嫖,就绝不乱花钱.惯常申请免费 SSL/TLS 证书的途径有: 各大云服务平台限量提供.比如阿里云会给每个账号每年 20 个证书的申请额度.缺点是不支持泛域名,一年后须 ...

  6. 关于ICMP隧道一点理解(起于修改wien-qq的记住密码)

    起 使用linux半年多以来,一直有一个我很需要但我无法完美解决的东西困扰这我-----(linux QQ) 目前我的解决方案是GitHub上的一个第三方QQ(有关ICMP隧道的搭建见 承,转) 但是 ...

  7. 开源一站式敏捷测试管理&极简项目管理 itest(爱测试) 6.6.0 发布 ,新增拖拽生成接口测试断言

    itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试5合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代 ...

  8. MySQL 导出一条数据的插入语句

    1.MySQL 导出一条数据的插入语句的方法 在MySQL中,如果我们想要导出一条数据的插入语句,我们可以使用SELECT ... INTO OUTFILE语句(但这通常用于将整个表或查询结果导出到一 ...

  9. 使用Wesky.Net.Opentools库,一行代码实现实体类类型转换为Json格式字符串

    安装1.0.10以及以上版本的 Wesky.Net.OpenTools 包   包内,该功能的核心代码如下: 自定义属性: 实体类JSON模式生成器:   使用方式:引用上面的1.0.10版本或以上的 ...

  10. 『手撕Vue-CLI』拷贝模板

    开篇 经过上篇文章的介绍,实现了可以根据用户选择的模板名称加上对应的版本号,可以下载对应的模板,并且将下载之后的文件存放在用户目录下的 .nue-template文件夹中. 接下来这篇文章主要实现内容 ...