参考:http://www.cnblogs.com/fakis/archive/2011/04/14/2016213.html

1. 折叠方式



可用选项来设定折叠方式:



可在Vim 配置文件中设置 set fdm=XXX

可直接在文件中使用注释调用vim命令 /* vim: set fdm=XXX: */



有6种方法来选定折叠:

1    manual          手工定义折叠         

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

3    expr              用表达式来定义折叠         

4    syntax           用语法高亮来定义折叠         

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

6    marker           对文中的标志折叠



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



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

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



2. 折叠命令



选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。



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

1    zc      折叠

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

3    zo      展开折叠

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

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

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

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

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



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



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



01    zf      创建折叠,比如在marker方式下:                  

02             zf56G,创建从当前行起到56行的代码折叠;                  

03             10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。                  

04             10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。                  

05             在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。

06     

07    zd      删除 (delete) 在光标下的折叠。

08             仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。

09     

10    zD     循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。

11             仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。

12     

13    zE      除去 (Eliminate) 窗口里“所有”的折叠。

14             仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。

http://yyq123.blogspot.com/2011/09/vim-fold.html

当我们查看很长的文本时(比如程序代码),可以使用:set foldenable命令来启动折叠。首先将内容按照其结构折叠起来,查看文件的大纲,然后再针对待定的行展开折叠,显示文本的详细内容。

Vim将折叠等同于行来对待——你可以使用j或k命令,移动跳过包含多行的整个折叠;也可以使用y或d命令,复制或删除某个折叠。

通常在折叠处向左或向右移动光标,或者进入插入模式,都将会自动打开折叠。我们也可以使用以下命令定义快捷键,使用空格键关闭当前打开的折叠,或者打开当前关闭的折叠。

:nnoremap <space> za

按照折叠所依据的规则,可以分为Manual(手工折叠)、Indent(缩进折叠)、Marker(标记折叠)和Syntax(语法折叠)等几种。

Manual Fold

使用以下命令,启用手工折叠。

:set foldmethod=manual

在可视化模式下,使用以下命令,将折叠选中的文本:

zf

通过组合使用移动命令,可以折叠指定的行。例如:使用zf70j命令,将折叠光标之后的70行;使用5zF命令,将当前行及随后4行折叠起来;使用zf7G命令,将当前行至全文第7行折叠起来。

我们也可以使用以下命令,折叠括号(比如()、[]、{}、><等)包围的区域:

zfa(

Vim并不会自动记忆手工折叠。但你可以使用以下命令,来保存当前的折叠状态:

:mkview

在下次打开文档时,使用以下命令,来载入记忆的折叠信息:

:loadview

可以使用以下命令,查看关于手工折叠的帮助信息:

:help fold-manual

Indent Fold

使用以下命令,启用缩进折叠。所有文本将按照(选项shiftwidth 定义的)缩进层次自动折叠。

:set foldmethod=indent

使用zm命令,可以手动折叠缩进;而利用zr命令,则可以打开折叠的缩进。

使用以下命令,将可以根据指定的级别折叠缩进:

:set foldlevel=1

可以使用以下命令,查看关于缩进折叠的帮助信息:

:help fold-indent

Syntax Fold

使用以下命令,启用语法折叠。所有文本将按照语法结构自动折叠。

:set foldmethod=syntax

可以使用以下命令,查看关于语法折叠的帮助信息:

:help fold-syntax

Marker Fold

使用以下命令,启用标记折叠。所有文本将按照特定标记(默认为{{{和}}})自动折叠。

:set foldmethod=marker

我们可以利用标记折叠,在文本中同时体现结构和内容,并且能够快速跳转到文件的不同部分。

可以使用以下命令,查看关于标记折叠的帮助信息:

:help fold-marker

折叠选项

使用:set foldcolumn=W命令(W是一个0-12的整数),将在屏幕左侧显示一个折叠标识列,分别用“-”和“+”而表示打开和关闭的折叠。

使用以下命令,可以查看关于折叠的帮助信息:

:help folding

命令小结
zc 关闭当前打开的折叠
zo 打开当前的折叠
zm 关闭所有折叠
zM 关闭所有折叠及其嵌套的折叠
zr 打开所有折叠
zR 打开所有折叠及其嵌套的折叠
zd 删除当前折叠
zE 删除所有折叠
zj 移动至下一个折叠
zk 移动至上一个折叠
zn 禁用折叠
zN 启用折叠

随机推荐

  1. BZOJ4699 : 树上的最短路

    这道题主要是要解决以下两个问题: 问题1: 给定一个点$x$,如何取出所有经过它的下水道? 一条下水道经过$x$等价于它起点在$x$的子树里面且终点不在$x$的子树里面,或者两端点的lca就是$x$. ...

  2. jquery之 off()方法

    off()函数用于移除元素上绑定的一个或多个事件的事件处理函数. off()函数主要用于解除由on()函数绑定的事件处理函数. 该函数属于jQuery对象(实例). 语法 jQuery 1.7 新增该 ...

  3. JSON 省市数据包括港澳

    data: [{ name: "北京", cities: ["西城", "东城", "崇文", "宣武&quo ...

  4. OpenNebula config配置详情

    AUTH_MAD=AUTHN=ssh,x509,ldap,server_cipher,server_x509,EXECUTABLE=one_auth_mad DATASTORE_BASE_PATH=/ ...

  5. linux系统文件的颜色代表的意思

    1.蓝色代表目录 2.绿色代表可执行文件 3.红色代表可压缩文件 4.白色代表其他文件 5.浅蓝色代表链接文件 6.黄色代码设备 7.红色闪烁表示链接的文件有问题

  6. springMVC整合jedis+redis

    http://www.cnblogs.com/zhengbn/p/4140549.html 前两天写过 springMVC+memcached 的整合,我从这个基础上改造一下,把redis和sprin ...

  7. UVA 11853 Paintball ——(dfs+圆交判定)

    题意:给出一个1000*1000大小的矩阵,里面有若干圆,表示障碍物,现在要找出从左边到右边的一条通路,输出入口和出口的坐标,如果有多答案,输出y值最大的答案. 分析:从与上面相连的圆开始dfs,每次 ...

  8. linux 下tomcat的安装

    写在前面: 由于项目使用jdk1.6开发,所以对应服务器应安装jdk1.6和tomcat6 --- 1.环境变量的配置: 打开/etc/bashrc配置环境变量 JAVA_HOME=/usr/apps ...

  9. 在Linux服务器部署 .NET-Core 项目

    一.文章概要  这篇文章是讲述一个Linux 新手将 .NET-Core 项目部署在 Linux 服务器上的一个记录,以及在部署期间遇到的问题以及解决办法.有不恰当的地方.欢迎大神指正. 二.前期准备 ...

  10. C# 模拟键盘操作SendKey(),SendKeys()

    模拟键盘输入就是使用以下2个语法实现的. SendKeys.Send(string keys);  //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键 ...