折叠细节

回忆上次

  • 上次我们讲的是折叠
  • 折叠有很多options

    • foldlevel - 显示折叠层次
    • foldcolumn - 折叠树宽度
    • foldmethod - 折叠方式

      • manual - 手动
      • indent - 缩进
  • 折叠的定义

    • zf2j

      • 当前行和下面两行建立折叠
    • zfa{

      • 用大括号(包含)建立折叠
    • zfi{

      • 用大括号(不包含)建立折叠
  • 折叠的删除

    • zd
  • 折叠的打开和关闭

    • zo open
    • zc close
    • :set foldlevel=1 设置折叠层次
  • 这个缩进折叠可以对于程序文件使用么?

    • 动手试试!

打开oeasy.java

  • 设置和查看属性
  • 折叠的options

    • foldmethod 设置为

      • indent - 缩进
    • foldcolumn 折叠树设置为

      • 4列
      • :set foldcolumn=4
    • foldlevel折叠层次

      • 设置为0 折叠整个class
      • 设置为1 折叠各个函数
      • 设置为2 全部打开
      • 默认设置为99 全部打开
    • :set foldopen=all 也可以直接打开所有折叠
    • :set foldclose=all 可以直接关闭所有折叠
  • 但是这个东西有快捷键么?

zr和zm

  • zr

    • z是折叠
    • rreduce
    • 让折叠层次fold level1
    • zR 所有的折叠都打开
  • zm

    • z是折叠
    • mmore
    • 让折叠层次fold level1
    • zM 所有的折叠都关闭
  • zozc区别

    • zozc仅对当前行起作用
    • zrzm对所有文字起作用
  • 如果我想对于某些 {range} 起作用,可以么?

foldopen、foldclose命令

  • 加上!的目的是彻底递归地折叠所有,能折到哪里折到哪里
  • :.foldopen

    • 当前行打开折叠 zo
  • :%foldclose

    • 所有都关闭折叠 zc
  • :1,15foldopen

    • 1,15行都折叠 zc
  • :33,Gfoldclose!

    • 33到最后一行彻底折叠 zC

更多折叠方法

  • 我们可以h foldmethod来观察一下

  • 折叠的模式总共有6种

    • 手动 - manual
    • 缩进 - indent
    • 表达式 - expr
    • 标记 - marker
    • 语法 - syntax
    • 差异 - diff
  • 这里面就是 indent 最好用
  • 帮助手册中的超链接

    • 用ctrl+]跳入
    • 用ctrl+o跳入

表达式折叠

  • 首先设置折叠方法为表达式

    • :set foldmethod=expr
  • 显示出空出来的缩进究竟是tab还是空格

    • :set listchars=eol:$,tab:>-,space:_
  • 然后设置各种表达式

设置

  • :set foldexpr=getline(v:lnum)[0]== \"\\t\"

    • 只要这一行的第0个元素是"\t"
    • 但注意双引号和反斜杠都需要转义
    • 也就是tab键
    • 那么这行就进入折叠范围

空行作为表达式

  • 下面这两条差不多

    • :set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
    • :set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1
  • 都可以把把空行分割开的段落都折叠起来

    • 后面的是一个表达式
    • 上一行不是空行并且上一行有非空字符那表达式就是1

关于表达式的计算

  • :set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1

    • :set foldexpr=后面的是一个表达式
    • 上一行不是空行并且上一行有非空字符那表达式就是1
    • 这个1就是折叠的层次

语法缩进

  • 这个比较复杂
  • 要设置具体的缩进规则的语法文件
  • 但是一旦设置好了之后
  • 就一劳永逸了
  • 一般常用的语言都有现成的syntax.vim
  • 但是我们也可以自己尝试

设置语法折叠

  • :syn sync fromstart
  • :set foldmethod=syntax
  • :syn region myFold start="{" end="}" transparent fold
  • 由于这个类有两层大括号
  • 所以被分成了两级折叠

  • foldnestmax可以控制最大层数

标记折叠

  • 这个设置方式直接在源文件里面用注释的方式做标记
  • 有点是特别明确
  • 缺点是不易修改
  • 而且在源文件里面放那么多不相关的内容
  • 增大存储、传输、理解的压力

diff折叠

  • 主要作用是找到两个文件中不同的部分
  • 相同的部分就给他折叠了
  • 这个也是vimdiff主要的foldmethod

  • 这么多到底用哪个?

    • indent!就很好
    • 很多语言缩进就是层次
    • 缩进就代表逻辑

总结

  • 折叠方式很多

    • 我们一般就用默认的就行
    • indent也很好用
    • 前提是缩进语法严格到位
  • 打开关闭

    • zczo 是打开关闭当前行
    • zmzr 可以改变foldlevel
  • 配合 {range}

    • :{range}foldopen! 可以在范围内打开行
    • :{range}foldclose! 可以在范围内关闭行
  • 但是这个折叠
  • 一关闭vim就没了
  • 这个折叠状态可以保存住么?
  • 下次再说!

[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 - 70 - # 折叠细节的更多相关文章

  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. 宝塔面板6.X在Docker中安装宝塔面板5.9.1 – 我是不是太闲了?

    我是不是太闲了,问你们三遍,场景是这样的,我在一台VPS里面安装宝塔面板6.X,宝塔面板的软件商店有Docker管理器2.0这一个免费好用的小玩意.大鸟安装好Docker管理器2.0,然后在Docke ...

  2. 将编译过的C++库迅速部署在Visual Studio新项目中

      本文介绍在Visual Studio中,通过属性表,使得一个新建解决方案中的项目可以快速配置已有解决方案的项目中各类已编译好的C++第三方库的方法.   例如,我们现有一个解决方案,其中的一个项目 ...

  3. 004. github使用

    github的使用 GitHub是一个git版本库的托管服务,GitHub是目前全球最大的软件仓库,拥有上班玩的开发者用户,也是软件开发和寻找资源的最佳途径,GitHub不仅可以托管各种git版本参控 ...

  4. S212-搜索+字典树-212. Word Search II-(Hard)

    一.题目 题目很简单,输入一个字母组成的二维数组,以某一个字母为起点,向.上下左右搜索.练成的字符看是不是在给定的字符串数组中 二.解答 通过深度优先搜索,每一步和数组中的字符串匹配是可以计算出来正确 ...

  5. K-D Tree 总结

    Luogu题单 前置芝士 \(K-D\;Tree\) 例题略解 P2479 [SDOI2010]捉迷藏 大概就是 K-D Tree 的板子题了吧,网上的打法都不太友好,参考了 fengwu 的打法. ...

  6. 工作中常用Less知识点实践总结

    我所理解的Less的一些好处 函数式编程css 自定义变量用于整体主题调整 嵌套语法简化开发复杂度 mixin的写法 .defaultBorder(@width: 10px, @style: soli ...

  7. 在AngularJS中,控制器没有生命周期方法

    在AngularJS中,控制器没有生命周期方法,但是$scope对象有一些事件,可以模拟生命周期方法的行为.例如,$scope.$on('$destroy', function() {...})可以在 ...

  8. Visual Studio 2022 community 社区版本离线安装

    下载好 vs_community__115739266.1625310894.exe 的,重命名为:vs_community2022.exe 命令: E:\vs_community2022.exe - ...

  9. Grafana 开源了一款 eBPF 采集器 Beyla

    eBPF 的发展如火如荼,在可观测性领域大放异彩,Grafana 近期也发布了一款 eBPF 采集器,可以采集服务的 RED 指标,本文做一个尝鲜介绍,让读者有个大概了解. eBPF 基础介绍可以参考 ...

  10. Linux高级命令

    重定向 重定向也称为输出重定向,用于将命令的输出保存到目标文件. 使用方法:> 文件名 或 >> 文件名.前者会覆盖文件内容,后者会追加内容到文件. 查看文件内容命令 cat: 显示 ...