# vim 中代码的折叠和打开

reference:

前言

在查看代码的时候,如果代码十分冗长,尤其是c/c++系列的时候,代码结构比较让人难以理清,主要是各种注释、括号的匹配问题。

虽然可以用%来查看匹配的另外一半符号在哪里,但是如果这一对符号之间的代码超过了一页,甚至好几页的话,那么也是比较难以理解的。

于是可以使用这个vim所提供的折叠功能来简化这些分析。

折叠的方式:

方式 意义
manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠

用法

配置:

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

注意,每一种折叠方式不兼容,即:你不能用expr又用marker方式。

set fdm=indent "设置成marker折叠方式

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

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

:nnoremap <space> za

折叠打开与折合

选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了。

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

indent 对应的折叠命令有:

使用时在大括号中间输入命令。

  • zc 折叠
  • zC 对所在范围内所有嵌套的折叠点进行折叠
  • zo 展开折叠
  • zO 对所在范围内所有嵌套的折叠点展开
  • [z 到当前打开的折叠的开始处。
  • ]z 到当前打开的折叠的末尾处。
  • zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
  • zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。

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

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

  • zf 创建折叠,比如在marker方式下:
zf56G,创建从当前行起到56行的代码折叠;
10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],等)。
  • zd 删除 (delete) 在光标下的折叠。仅当 foldmethod 设为 manualmarker时有效。
  • zD 循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。仅当 foldmethod 设为 manualmarker时有效。
  • zE 除去 (Eliminate) 窗口里“所有”的折叠。仅当 foldmethod 设为 manualmarker时有效。

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

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 启用折叠

vim 中代码的折叠和打开的更多相关文章

  1. vim中代码按照行对齐。

    在vim下, 用命令v, 然后移动光标,选种你的文本, 然后按下=键, 看看效果如何吧.

  2. vim中代码自动格式化

    参考资料: https://blog.csdn.net/qachenzude/article/details/25511875 1,gg 跳转到第一行 2,shift+v 转到可视模式 3,shift ...

  3. vim中代码注释与取消的两种方法

    一.灵活应用列操作 取消注释(删除列) 1.光标定位到需要注释的第一行的行首. 2.CTRL+v 进入"可视 块"模式,选取需要注释的其他多行. 3.d 删除,注释取消.   添加 ...

  4. vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb

    vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb << 返回vim使用进阶: 目录 本节所用命令的帮助入口: :help vimgdb 在UNIX系统最初设计时,有一 ...

  5. vim设置为indent折叠以后,每次打开文件时代码处于折叠状态,能改变吗?

    vim设置为indent折叠以后,每次打开文件时代码处于折叠状态.即使这次编辑的时候把折叠展开,保存关闭文件,重新打开,所有的代码都又折叠起来了. 请问有没有默认不折叠的方法? 是否有可以一次展开所有 ...

  6. VIM设置代码折叠

    今天看了一下别人写的程序的源代码,发现是用vim写的,代码中有趣是用vim来折叠代码,一开始我以为是用插件的,后来上网查了查,得出以下使用方面的技巧. 1. 折叠方式 可用选项来设定折叠方式: 可在V ...

  7. vim中常用折叠命令

    最常用3个折叠命令 .反复打开关闭折叠:za (意思就是,当光标处折叠处于打开状态,za关闭之,当光标处折叠关闭状态,打开之) .打开全部折叠:zR .关闭全部折叠:zM 小试折叠: :set fdm ...

  8. eclipse实现代码块折叠-类似于VS中的#region……#endregion

    背 景 刚才在写代码的时候,写了十几行可以说是重复的代码: 如果整个方法或类中代码多了,感觉它们太TM占地方了,给读者在阅读代码上造成很大的困难,于是想到能不能把他们“浓缩”成一行,脑子里第一个闪现出 ...

  9. 在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码

    在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码 参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/0 ...

  10. 在 Vim 中使用 pydiction 对 Python 进行代码补全

    Pydiction 允许你在 Vim 中实现 TAB 代码补全, 可以补全的内容包括:标准的.自定义的,以及第三方模块和包.外加关键字.BIFs,和字符串. Pydiction 由 3 个主要文件构成 ...

随机推荐

  1. vue从事件修饰符的角度讨论如何合理的设计一个弹窗

    1.设计思路:弹窗一般可以通过封装,单独设计一个组件,在需要的地方引入并通过变量布尔值进行展示和隐藏,方便使用者进行交互或提示信息 具体操作就是在给这个组件背景层添加全屏固定定位并设置透明度(cove ...

  2. 从[SDOI2011]消防 到[NOIP2007]树网的核

    有关消防一题中最优解一定在直径上的证明 P2491 [SDOI2011] 消防 P1099 [NOIP2007 提高组] 树网的核 题目描述 在一颗 \(n\) 个节点的无根树中,找到一条不超过 \( ...

  3. 【git】建立分支

    1.git clone现有的项目 git clone git@github.com:zhangshengdong/Zflask.git 2.建立关联 git remote add origin git ...

  4. VMware最小化安装Centos7.6-无桌面

    目录 安装包工具 新建虚拟机 安装 centos 7.6 系统 终端登陆系统 设置ip地址 关闭防火墙 关闭 SELINUX SELINUX=enforcing 硬盘挂载 桥接上网方式 安装包工具 V ...

  5. ssh端口转发实际应用

    目录 1 ssh本地端口转发 2 ssh远程端口转发 3 跨网络访问(网关功能) 4 动态端口转发(KX上网) SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.而且,SSH 还能够 ...

  6. vscode关于json文件添加注释报错处理

  7. 扩展Unity编辑器顶部Toolbar,增加自定义按钮

    游戏需要增加几种启动模式,要在编辑器顶部Toolbar处增加几个按钮:进行下扩展. 这部分Unity没有直接提供接口,需通过反射实现.看了下有一个开源库: https://github.com/mar ...

  8. apisix~lua插件开发与插件注册

    开发插件的步骤 在APISIX中,要自定义插件,一般需要按照以下步骤进行操作: 编写Lua脚本:首先,你需要编写Lua脚本来实现你想要的功能.可以根据APISIX提供的插件开发文档和示例进行编写. 将 ...

  9. 5GC 关键技术之 SBA(基于服务的软件架构)

    目录 文章目录 目录 前文列表 5GC 的关键技术 SBA(基于服务的软件架构) 微服务架构 NF 的模块化 NF Service 的服务化 前文列表 <简述移动通信网络的演进之路> &l ...

  10. Java面试题:SpringBoot异常捕获,让程序“免疫”一切错误!

    在Spring Boot应用程序中,捕获全局异常是一个重要的方面,它可以帮助我们处理在应用程序运行时可能发生的各种错误情况.通过适当地捕获和处理这些异常,我们可以改善用户体验并及时采取必要的措施. 使 ...