文章目录
前言
本文章旨在总结自己在利用 Vim 阅读和写代码过程中所用的折叠代码的方法。
vim 折叠设置
vim 自带代码折叠功能。在 vim 中折叠设置:set fdm=xxx(fdm< foldmethod >缩写),可在 .vimrc 文件中定义实现,可永久有效。vim 自带的代码折叠有 manual,indent,marker,diff,syntax,expr等六种模式。
- manual:手工定义折叠
- indent:按缩进折叠
- marker:用标记/{{{/ /}}}/来定义折叠
- diff:比较模式,对没有更改的文本进行折叠
- syntax:用语法高亮来定义折叠
- expr:用表达式进行折叠
模式
(1) manual 模式:set foldmethod=manual
此模式下的折叠功能只能依靠人工创建折叠范围区,在此基础上对折叠区进行开启、关闭、删除和移动等操作。
创建折叠区 : zf
- vj/vk/vG/vgg 选中区域后执行 zf
- zfnj:从当前行开始向下到n行折叠
- zfnk:从当前行开始向上到n行折叠
- zfgg:从当前行到第一行折叠
- zfG:从当前行到最后一行折叠
- zfngg:从当前行到第n行折叠
- zfap:按段落折叠
- zfa(:折叠括号包围的区域(如:()、[]、{}、><等)
开启
- za:开启/关闭当前折叠区,任何时候有效
- zi:开启/关闭所有级折叠区,仅对对自己开启的折叠区有效
- zv/zo:打开当前折叠区
- zO:打开当前所有级折叠区
- zr:打开同一级折叠区
- zR:递归打开所有折叠区
关闭
- zm:关闭同一级折叠区
- zM:关闭所有级折叠区
- zc:关闭当前折叠区
- zC:关闭选取范围内所有级折叠区
- zn:禁用折叠
- zN:启用折叠
删除
- zd:删除当前折叠区
- zD:删除当前所有级折叠区
- zE:删除窗口内所有折叠区
移动
- zj:向下一个折叠点移动
- zk:向上一个折叠点移动
- [z:移动到打开后的折叠区的开始处
- ]z:移动到打开后的折叠区的结束处
注
vim不会自动记忆手工折叠点需要如下命令进行保存/读取
- :mkview 进行保存
- :loadview 进行读取
(2) indent模式:set foldmethod=indent
此模式下的折叠功能依据缩进自动进行,zf 在此模式中无效,在此基础上对折叠区进行开启、关闭和移动等操作与手动模式的一致。
- :set foldlevel=1 #指定级别折叠缩进
- :set foldlevelstart=99 #避免启动编辑器代码自动折叠
(3) marker模式:set foldmethod=marker
此模式默认按{{{ }}}标志作为缩进依据,zf 会自动生成该标志,在此基础上对折叠区进行开启、关闭、删除和移动等操作与手动模式的一致。
- :set foldlevelstart=99 #避免启动编辑器代码自动折叠
总结
以上命令会持续补充,可以说“条条大路通罗马”,为完成一个任务可能不止一种方法,有好的方法可以完成相同的任务也欢迎大家提出宝贵的意见。