今天看了一下别人写的程序的源代码,发现是用vim写的,代码中有趣是用vim来折叠代码,一开始我以为是用插件的,后来上网查了查,得出以下使用方面的技巧。
1. 折叠方式
可用选项来设定折叠方式:
可在Vim 配置文件中设置 set fdm=XXX
可直接在文件中使用注释调用vim命令 /* vim: set fdm=XXX: */
有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会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。
在可折叠处(大括号中间):
zf 手动创建折叠
zc 折叠光标所在处(不一定有效,但是条件不清楚,有括号的时候可以成功)
zC 对所在范围内所有嵌套的折叠点进行折叠
zo 将当前折叠打开
zO 对所在范围内所有嵌套的折叠点展开
zm 折叠所有层次(依层次折叠)
zM 折叠所有 (依层次折叠),作用和zm 同,但对于巢状折叠亦有作用
zn 打开全文的所有折叠。 fold none。
zN 这是zn 的相对指令,回复所有的折叠。zr 打开所有折叠层次(依层次打开)
zR 打开所有折叠 (依层次打开),作用和zr 同,但会打开折叠中又还有折叠的所有折叠。
zi 切换折叠与不折叠指令
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入
zd 删除折叠(其实在折叠上面dd就可以删除了)
zD 删除所有折叠
[z 到当前打开的折叠的开始处。
]z 到当前打开的折叠的末尾处。
当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动
所有的折叠命令都以'z' 开头。展开你的想像力,这个字母看起来就像一张折叠起来的纸的侧面。而"z" 后面可用的字母,由于采用了帮助记忆方法选择,很容易记得住:zf F-old creation (创建折叠)
zo O-pen a fold (打开折叠)
zc C-lose a fold (关闭折叠)
一次打开所有折叠:
zr zR(用于有递归折叠的时候,功能与zr类似)
一次关闭所有折叠:
zm zM(用于有递归折叠的时候,功能与zm类似)
切换折叠与不折叠指令:
zi 当我们创建了折叠以后,可以使用zi关闭所有折叠,将光标移到想浏览的文本处,再按zi,打开所有折叠
我们可以使用下面的命令来创建和删除折叠:
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" 时有效。
zfap #折叠当前所在的段落【a命令详解:http://bbs.konotes.org/thread-4910-1-1.html】
zfa{或zfa} #折叠当前花括号的内容
zf20G 从当前位置折叠向后折叠20行内容
zfgg 从当前位置折叠到文件头,适合编程的时候隐藏文件顶部的头文件包含,源文件注释
zf% 折叠一个函数,需要在花括号上执行此命令【%命令参考:http://bbs.konotes.org/thread-3711-1-1.html】
参考文章:
2. vim 折叠命令详解