上一讲我们是程序员篇的第一讲,关于代码跳转。代码跳转是一个付出很少收获很大的功能。这一节我们开始一个收获很多,但是付出也相对多一点功能:代码折叠。
代码折叠
折叠的类型
折叠有下面几种类型:
- Manual: 手动创建折叠。但是退出vim后就一切都没了。
- Marker: 基于特定的字符组合进行折叠。
- Expr: 定义正则表达式来处理折叠,这是最终的解决方案。
- Indent: 这个最简单也最基本,根据缩进来折叠。
- Syntax: 根据程序语义进行折叠。
我们先看一个例子,左边是采用syntax方式进行折叠的,右边是采用indent方式。
从上面的例子可以看到,折叠方式的属性是跟窗口相关的,每个窗口都设置不同的折叠方式。
设置折叠的方式,是通过设置foldmethod属性来实现的,例:
:set foldmethod=indent
:set foldmehtod=syntax
折叠操作命令速成
折叠命令都是以z字开头的,对于中国人最友好了,就是折字的拼音首字母么。
最重要的折叠命令就是za,切换折叠状态。
- za: 切换折叠状态
- zA: 递归切换折叠状态
- zo: 打开一个折叠
- zc: 关闭一个折叠
- zj: 移动到下一个折叠
- zk: 移动到上一个折叠
手动模式
我们可以通过zf命令手动创建折叠。比如上图中,Pseudo code for int 21那一段我们看着不爽,想把它折叠起来。
我们先切折叠模式:
:set foldmethod=manual
然后移动到Pseudo那一行,输入创建命令:
zf4j
zf是创建折叠命令,后面接命令的范围,我们要创建这5行的折叠,所以我们用4j向下移动4行。
最后,在这5行上试试zc命令吧,就是下面这个效果:
我们如果可以数出来有几行的话,可以使用zF命令来创建,例:
5zF
上面就创建5行的折叠。
未尽事宜
vim虽然功能很全,但是不可能支持每一种我们想要的格式。我们还是需要写脚本来实现自己的折叠方式的。不过我们还没有学习vimscript的基础,这一部分后面我们再补课。