Vim 折叠是 Vim 编辑器中一个非常有用的功能,它可以帮助我们更好地管理文件中的内容。它可以将文件中的内容折叠起来,使得文件看起来更加整洁,也更容易管理。
Vim 折叠的方式有很多种,其中最常用的是行折叠和块折叠。行折叠是将一行或多行代码折叠起来,使得文件更加整齐。而块折叠则是将一个代码块或函数体进行折叠,使得文件更加整齐。
" 行折叠 :set foldmethod=manual " 设置为手动行折叠 zf#j " 将当前光标所在行向下 # 行进行折叠 zf/string " 将当前光标所在行向下直到遇到 string 字符串进行折叠 zj " 展开当前光标所在行的上一个已经被折叠的区域 zk " 展开当前光标所在行的下一个已经被折叠的区域
" 块折叠 :set foldmethod=syntax " 设置语法块方式进行代码块或函数体的折叠 za " 执行此命令会对当前光标所在处进行代码块或函数体的展开/闭合(如已闭合则会展开) zM " 闭合当前光标所在处之上所有已经被展开的代码区域/函数体(不包含当前光标所在处) zR " 展开当前光标所在处之上所有已经被闭合的代码区域/函数体(不包含当前光标所在处)
如果从未在Vim里使用过代码折叠,你不知道你都错过了什么。 阅读:help usr_28
并花费时间在日常工作中使用它。 一旦到了铭记于指的程度,你就可以继续本章了。
Vim支持六种不同的决定如何折叠你的文本的折叠类型。
你手动创建折叠并且折叠将被Vim储存在内存中。 当你关闭Vim时,它们也将一并烟消云散,而下次你编辑文件时将不得不重新创建。
在你把它跟一些自定义的创建折叠的映射结合起来时,这种方式会很方便。 在本书中,我们不会这么做,但当你想这么做的时候,它会帮上忙。
Vim基于特定的字符组合折叠你的代码。
这些字符通常放置于注释中(比如// {{{
), 不过在有些语言里,你可以使用该语言自己的语法代替,比如javascript的{
和}
。
纯粹为了你的编辑器,用注释割裂你的代码看上去有点丑,但好处是你可以定制特定的折叠。 如果你想以特定的方式组织一个大文件,这个类型将是非常棒的选择。
在diff文件时使用该特定的折叠类型。我们不会讨论它,因为Vim会自动使用它。
这让你可以用自定义的Vimscript来决定折叠的位置。它是最为强大的方式,不过也需要最繁重的工作。 下一章我们将讲到它。
Vim使用你的代码的缩进来折叠。同样缩进等级的代码折叠到一块,空行则被折叠到周围的行一起去。
这是最便捷的方式,因为你的代码已经缩进过了;你仅仅需要启动它。 这将是我们用来折叠Potion代码的第一种方式。
让我们再一次看一下Potion实例代码:
factorial = (n):
total = 1
n to 1 (i):
total *= i.
total.
10 times (i):
i string print
"! is: " print
factorial (i) string print
"n" print.
函数体和循环体已经缩进好了。这意味着我们可以不怎么费力就能实现一些基本的缩进。
在我们开始之前,在total *= i
上添加一个注释,这样我们就有一个供测试的多行内部块。 你将在做练习的时候学到为什么我们需要这么做,但暂时先信任我。现在文件看上去就像这样:
factorial = (n):
total = 1
n to 1 (i):
# Multiply the running total.
total *= i.
total.
10 times (i):
i string print
"! is: " print
factorial (i) string print
"n" print.
在你的Potion插件的版本库下创建一个ftplugin
文件夹,然后在里面创建一个potion
文件夹。 最后,在_potion
文件夹_里面创建一个folding.vim
文件。
不要忘了每次Vim设置一个buffer的filetype
为potion
时,它都会执行这个文件中的代码。 (因为它位于一个叫potion
的文件夹)
将所有的折叠相关的代码放在同一个文件显然是一个好主意,它能帮我们维护我们的插件的繁多的功能。
在这个文件中加入下面一行:
setlocal foldmethod=indent
关闭Vim,重新打开factoria.pn
。用zR
,zM
和za
尝试折叠功能。
一行Vimscript代码就能带来一些有用的折叠!这真是太酷了!
你可能注意到factorial
函数的内循环里面的那几行不能折叠,尽管它们缩进了。 为什么会这样?
事实上,在使用indent
折叠时,Vim默认忽略以#
字符开头的行。 这在编辑C文件时很有用(这时#
表示一个预编译指令),但在编辑其他文件时不怎么有意义。
让我们在ftplugin/potion/folding.vim
中添加多一行来修复问题:
setlocal foldmethod=indent
setlocal foldignore=
关闭并重新打开factorial.pn
,现在内部块可以正常地折叠了。
阅读:help foldmethod
.
阅读:help fold-manual
.
阅读:help fold-marker
和:help foldmarker
.
阅读:help fold-indent
.
阅读:help fdl
和:help foldlevelstart
.
阅读:help foldminlines
.
阅读:help foldignore
.
视图role_udt_grants标识所有在用户定义类型上授予的USAGE特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信...
视图user_mappings包含定义在当前数据库中的所有用户映射。只有当前用户能够访问其对应外部服务器(作为拥有者或具有某些特权)...
视图collations包含在当前数据库中可用的排序规则。表36.8.collations 列列类型描述 collation_catalogsql_identifier包含该排序...
目录pg_largeobject保存构成“大对象”的数据。一个大对象在被创建时会被分配一个OID。每个大对象被分解成段或“页”,以便小到...
视图pg_shadow的存在是为了向后兼容:它模拟了在PostgreSQL版本8.1之前的一个系统目录。它显示pg_authid中所有被标记为rolcanlog...
分屏操作分屏何为分屏..请看此图为何要分屏用过 linux 的小伙伴都知道,分屏耍的好,可以提高工作效率的。如何获取 Atom 的分屏命...
从v2版本开始,项目的创建不再依赖远端获取,仓库模板已经通过资源管理的方式内置到了工具二进制文件中,因此项目创建速度非...