设置VIM代码折叠效果

  1. 折叠方式

可用选项 ‘foldmethod’ 来设定折叠方式:set fdm=*****

有 6 种方法来选定折叠:

manual 手工定义折叠

indent 更多的缩进表示更高级别的折叠

expr 用表达式来定义折叠

syntax 用语法高亮来定义折叠

diff 对没有更改的文本进行折叠

marker 对文中的标志折叠

注意,每一种折叠方式不兼容,如不能即用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。

使用时,用:set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。

要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。

  1. 折叠命令

选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:

如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。

在可折叠处(大括号中间):

zc 折叠

zC 对所在范围内所有嵌套的折叠点进行折叠

zo 展开折叠

zO 对所在范围内所有嵌套的折叠点展开

[z 到当前打开的折叠的开始处。

]z 到当前打开的折叠的末尾处。

zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。

zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。

当使用marker方式时,需要用标计来标识代码的折叠,系统默认是 {{{和}}} ,最好不要改动之:

我们可以使用下面的命令来创建和删除折叠:

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” 时有效。

以上内容摘自互联网


我使用的是marker折叠方式,修改它的折叠识别代码,实现将{}内的内容折叠。方法如下:

在vimrc中添加如下代码,然后运行VIM后按F6键即可。

1
2
3
4
5
6
7
"代码折叠设置-----------------------------------
"{}折叠设置 ---------------------------------
map <F6> :call My_Fold()<CR>
function My_Fold()
set foldmethod=marker
set foldmarker={,}
endfunction

有不懂的可以使用命令:help marker查看帮助。
效果如下图: