1. 折叠方式
可用选项来设定折叠方式:
可在Vim 配置文件中设置 set fdm=XXX
可直接在文件中使用注释调用vim命令 /* vim: set fdm=XXX: */
有6种方法来选定折叠:
1
2
3
4
5
6
|
manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠
|
注意,每一种折叠方式不兼容,如不能既用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。
使用时,用 set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。
要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。
2. 折叠命令
选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。
在可折叠处(大括号中间):
1
2
3
4
5
6
7
8
|
zc 折叠
zC 对所在范围内所有嵌套的折叠点进行折叠
zo 展开折叠
zO 对所在范围内所有嵌套的折叠点展开
[z 到当前打开的折叠的开始处。
]z 到当前打开的折叠的末尾处。
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。
|
当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动
我们可以使用下面的命令来创建和删除折叠:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
zf 创建折叠,比如在marker方式下:
zf56G,创建从当前行起到56行的代码折叠;
10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
zd 删除 (delete) 在光标下的折叠。
仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zD 循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。
仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zE 除去 (Eliminate) 窗口里“所有”的折叠。
仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
|
- 问题:怎样在vim中实现代码折叠功能?
- 解决方法:直接使用vim自带的快捷键和命令,便可以实现功能强大的折叠
- 小试折叠:
- 1 :set fdm=marker 在vim中执行该命令
- 2 5G 将光标跳转到第5行
- 3 zf10G 折叠第5行到第10行的代码,vim会在折叠的开始和结束自动添加三个连续的花括号作为标记
- 4 zR 打开所有折叠
- 5 zM 关闭所有折叠
- 6 zE 删除所有的折叠标签
- 7 退出vim窗口再次打开,执行2-6步。依然可以折叠,但是没有标记了。重新打开后折叠信息会丢失。
- 折叠方法:
- 1 manual (不常用)默认折叠方法,如上面第7步即为该方法,关闭vim折叠会丢失。如果想保持折叠信息,可运行 :mkview 命令,重启后用 :loadview 命令回复。该命令生成的缓存文件位于 ~/.vim/view 文件夹中。移动或重命名文件,折叠信息依然会丢失。
- 2 indent (常用)缩进折叠方法,相同的缩进中代码会被折叠。
- 3 syntax (不常用)语法高亮折叠,在c/c++中会折叠花括号部分,其它格式代码中有的不能自动折叠。
- 4 marker (常用)标记折叠方法,如上面1-6所使用的方法。关闭vim折叠信息不会丢失,而且易用控制和标注。
- 5 还有两种 diff 和 expr,目前我还没有用过。
- 具体介绍:
- 1 以 marker 为例,可以在vim中运行 :set fdm=marker 来设置折叠方法设置。折叠方法的时候,= 两边不能有空格。也可以将该命令添加到~/.vimrc中,实现vim自动加载。
- 2 在使用小试折叠中 2 3 步折叠的时候,vim会自动添加三个连续的花括号作为标记,可在开始的花括号前添加介绍,花括号后添加级别号,级别号不能为0。如:/*折叠介绍{{{1*/
- /*}}}*/
- 3 级别的定义稍显复杂。在一般编码中,通常把不需要修改的代码添加标记折叠。没有必要在给折叠分等级。如果想快速折叠就切换为indent折叠方面,适用于任何有缩进的代码。
- 折叠命令:
- 1 zf 创建折叠,可以按照前面的方式进行折叠,也可以选中代码后进行折叠。
- 2 zF 在当前行创建折叠。当一开始就计划要折叠所写代码的时候,可以用该命令创建一对折叠符号,然后再往里面填写内容。
- 3 :5,10fo 在vim中运行该命令会在折叠 5-10 行中的代码,可以用其它数字代替之。
- 4 zd 删除光标下的折叠。
- 5 zD 删除光标下的折叠,以及嵌套的折叠。
- 6 zE 删除窗口内的所有折叠。仅当 manual 和 marker 折叠方法下有效。
- 打开和关闭折叠:
- 1 zo 打开光标下的折叠。
- 2 zO 打开光标下的折叠,以及嵌套的折叠。
- 3 zc 关闭光标下的折叠。
- 4 zC 关闭光标下的折叠,以及嵌套的折叠。
- 5 za 当光标在关闭折叠上时,打开之。在打开折叠上时,关闭之。
- 6 zA 和za类似,不过对当前折叠和其嵌套折叠都有效。
- 7 zv 打开当前光标所在折叠,仅打开足够的折叠使光标所在的行不被折叠。
- 8 zr和zm 一层一层打开折叠和一层一层关闭折叠,这两个命令会递减和递增一个叫foldlevel的变量。如果你发现zm和zr不灵了,那有可能是你连续按的zr或zm次数多了,只要多按几次让foldlevel回到正常状态即可。执行以下zR和zM也可直接让foldlevel回到正常状态。
- 9 zR和zM 打开所有折叠,设置foldlevel为最高级别。关闭所有折叠,设置foldlevel为0。
- 在折叠间移动:
- 1 [z 到当前打开折叠的开始。如果已在开始处,移到包含这个折叠的折叠开始处。
- 2 ]z 到当前打开折叠的结束。如果已在结束处,移到包含这个折叠的折叠结束处。
- 3 zj 把光标移动到下一个折叠的开始处。
- 4 zk 把光标移动到前一个折叠的结束处。
- 参考:
- 在vim中运行 :h Folding 命令,查看折叠的帮助文档。