VIM学习笔记 折叠(Fold)

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

fold_close

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

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

:nnoremap <space> za

按照折叠所依据的规则,可以分为Manual(手工折叠)、Indent(缩进折叠)、Expr(自定义折叠)、Marker(标记折叠)、Diif(差异匹配折叠)和Syntax(语法折叠)等几种。

Manual Fold

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

:set foldmethod=manual

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

zf

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

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

zfa(

使用以下命令,则可以自动匹配括号并进行折叠:

zf%

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

:mkview

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

:loadview

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

:help fold-manual

Indent Fold

缩进折叠(fold-indent),将文本按照'shiftwidth'选项定义的缩进层次进行折叠。

例如在以下文档中,使用Tab制表符按层级列示了文档目录:

fold_indent_outline

使用以下命令,启用缩进折叠。由于'shiftwidth'选项默认为8个空格,与默认Tab制表符一致,因此文本将按照制表符自动折叠。

:set foldmethod=indent

fold_indent_close

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

:set foldlevel=1

如下图所示,展开了一级目录,而更下层级依然是折叠状态。可以看到,折叠功能非常适合编辑文档目录和待办事项等层级(outline)结构。

fold_indent_level

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

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

:help fold-indent

Syntax Fold

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

:set foldmethod=syntax

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

:help fold-syntax

Marker Fold

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

:set foldmethod=marker

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

fold_marker

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

:help fold-marker

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

:help folding

命令小结
za打开/关闭当前的折叠
zA打开/关闭当前的折叠及其嵌套的折叠
zc关闭当前打开的折叠
zC关闭当前打开的折叠及其嵌套的折叠
zo打开当前的折叠
zO打开当前的折叠及其嵌套的折叠
zm关闭所有折叠
zM关闭所有折叠及其嵌套的折叠
set foldlevel=0
zr打开所有折叠
zR打开所有折叠及其嵌套的折叠
zf创建折叠
zd删除当前折叠
zD删除当前折叠及其嵌套的折叠
zE删除所有折叠
zj移动至下一个折叠
zk移动至上一个折叠
zn禁用折叠
zN启用折叠

Ver: 1.0<上一篇 | 目录 下一篇>