oeasy教您玩转vim - 70 - # 折叠细节
折叠细节
回忆上次
- 上次我们讲的是折叠
折叠有很多options
foldlevel- 显示折叠层次foldcolumn- 折叠树宽度foldmethod- 折叠方式manual- 手动indent- 缩进
折叠的定义
zf2j- 当前行和下面两行建立折叠
zfa{- 用大括号(包含)建立折叠
zfi{- 用大括号(不包含)建立折叠
折叠的删除
zd
折叠的打开和关闭
zoopenzcclose: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

zrz是折叠r是reduce- 让折叠层次
fold level减1 zR所有的折叠都打开
zm
z是折叠m是more- 让折叠层次
fold level加1 zM所有的折叠都关闭
和
zo、zc区别zo、zc仅对当前行起作用zr、zm对所有文字起作用
- 如果我想对于某些
{range}起作用,可以么?
foldopen、foldclose命令

- 加上!的目的是彻底递归地折叠所有,能折到哪里折到哪里
:.foldopen- 当前行打开折叠
zo
- 当前行打开折叠
:%foldclose- 所有都关闭折叠
zc
- 所有都关闭折叠
:1,15foldopen- 1,15行都折叠
zc
- 1,15行都折叠
:33,Gfoldclose!- 33到最后一行彻底折叠
zC
- 33到最后一行彻底折叠
更多折叠方法
- 我们可以
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键
- 那么这行就进入折叠范围
- 只要这一行的第0个元素是


空行作为表达式


下面这两条差不多
: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也很好用
- 前提是缩进语法严格到位
打开关闭
zc、zo是打开关闭当前行zm、zr可以改变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 - # 折叠细节的更多相关文章
- oeasy教您玩转vim - 56 - # 字符可视化模式
可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...
- oeasy教您玩转vim - 57 - # 行可视化
可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...
- oeasy教您玩转vim - 53 - # 批量替换
查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...
- oeasy教您玩转linux010203显示logo
我们来回顾一下 上一部分我们都讲了什么?
- oeasy 教您玩转linux010101查看内核uname
linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...
- oeasy教您玩转linux010202软件包管理apt
顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010201持续输出yes
我们来回顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010108到底哪个which
到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?
- oeasy教您玩转python - 006 - # hello world
Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...
- oeasy教您玩转linux-010110内容回顾
我们来回顾一下 我们都讲了什么?
随机推荐
- systemctl管理自定义服务模版
一 日常工作中,有许多需要使用systemctl进行管理服务的时候 [Unit] Description=radius Release [Service] ExecStart=/etc/init.d ...
- k8s的知识图谱以及相关的知识梳理
一 kubernetes的知识图谱如下所示: 可以随时的根据自身情况来学习和深化对知识点的总结和归档
- JS 监听用户页面访问&页面关闭并进行数据上报操作
JS 监听用户页面访问&页面关闭操作并进行数据上报 前言 最近在做安全方面的项目,有个需求是在用户访问页面和关闭页面的时候,发送对应的数据. 刚拿到需求的时候,觉得没啥东西,init 的时候发 ...
- 基于Ubuntu20.04在k8s 1.25部署gin+MySQL服务
0. 前言 某天突发奇想,既然都学了 docker 了,那干脆,顺便把 kubernetes 也学了,于是开始了我长达一个月的环境搭建.踩坑历程. 最开始,我的想法是,在我的物理机使用 WSL + d ...
- 011. jenkins 备份
Jenkins目录介绍 1. 主配置文件: /etc/sysconfig/jenkins 2. Jenkins主目录: /var/lib/jenkins/ [root@node1 plugins]# ...
- ReplayKit2 有线投屏项目-反向Socket实现
一.需求 我们在使用RTMP协议进行推流的时候,底层仍然采用的是TCP协议或者QUICK协议,有客户端主动发起请求.但是在有线投屏中,需要PC端向手机发起请求建立连接 二.实现 在客户端主动发起请求之 ...
- NOIP模拟91(多校24)
T1 破门而入 解题思路 签到题(然而我数组开小直接变成暴力分...) 发现其实就是第一类斯特林数,然后 \(n^2\) 推就好了. 感觉可以用 NTT 优化成 \(nlogn\) ,但是好像并没有什 ...
- js 生成pdf
最简洁的代码 <script src="js/html2canvas.min.js" type="text/javascript" charset=&qu ...
- 鸿蒙HarmonyOS实战-ArkTS语言基础类库(概述)
一.概述 1.什么是语言基础类库 语言基础类库,也称为标准库或核心库,是编程语言提供的一组内置的基础功能和常用工具的集合.它通常包含了各种数据结构.算法.输入输出处理.字符串处理.日期时间处理.文件操 ...
- 一文了解JVM(中)
HotSpot 虚拟机对象探秘 对象的创建 Header 解释 使用 new 关键字 调用了构造函数 使用 Class 的 newInstance 方法 调用了构造函数 使用 Constructor ...