×

vi 命令手册

vi/vim 命令大全

vim 命令手册

Vim 关于Vim 安装Vim 用法Vim 配置vim 配置.vimrc方案vim 配置.vimrc方案1vim 配置.vimrc方案2Vim 文件合并Vim 技巧和建议Vim 插件Vim 参阅

Vimscript 编程参考

Vimscript 前言Vimscript 鸣谢Vimscript 预备知识Vimscript 打印信息Vimscript 设置选项Vimscript 基本映射Vimscript 模式映射Vimscript 精确映射Vimscript LeadersVimscript 编辑你的Vimrc文件Vimscript AbbreviationsVimscript 更多的MappingsVimscript 锻炼你的手指本地缓冲区的设置和映射Vimscript 自动命令Vimscript 本地缓冲区缩写Vimscript 自动命令组Operator-Pending 映射Operator-Pending 更多映射Vimscript 状态条Vimscript 负责任的编码Vimscript 变量Vimscript 变量作用域Vimscript 条件语句Vimscript 比较Vimscript 函数Vimscript 函数参数Vimscript 数字Vimscript 字符串Vimscript 字符串函数Vimscript Execute命令Vimscript Normal命令Vimscript 执行normal!Vimscript 基本的正则表达式Grep 运算符Operator 第1部分Grep 运算符Operator 第2部分Grep 运算符Operator 第3部分Vimscript 列表Vimscript 循环Vimscript 字典Vimscript 切换Vimscript 函数式编程Vimscript 路径Vimscript 创建一个完整的插件Vimscript 基本插件配置方式用Pathogen配置插件Vimscript 检测文件类型Vimscript 基本语法高亮Vimscript 高级语法高亮Vimscript 基本折叠Vimscript 高级折叠Vimscript 段移动原理Vimscript Potion段移动Vimscript 外部命令Vimscript 自动加载Vimscript 文档Vimscript 发布Vimscript 还剩下什么?

Vimscript 基本折叠


如果从未在Vim里使用过代码折叠,你不知道你都错过了什么。 阅读:help usr_28并花费时间在日常工作中使用它。 一旦到了铭记于指的程度,你就可以继续本章了。

折叠类型

Vim支持六种不同的决定如何折叠你的文本的折叠类型。

Manual

你手动创建折叠并且折叠将被Vim储存在内存中。 当你关闭Vim时,它们也将一并烟消云散,而下次你编辑文件时将不得不重新创建。

在你把它跟一些自定义的创建折叠的映射结合起来时,这种方式会很方便。 在本书中,我们不会这么做,但当你想这么做的时候,它会帮上忙。

Marker

Vim基于特定的字符组合折叠你的代码。

这些字符通常放置于注释中(比如// {{{), 不过在有些语言里,你可以使用该语言自己的语法代替,比如javascript的{}

纯粹为了你的编辑器,用注释割裂你的代码看上去有点丑,但好处是你可以定制特定的折叠。 如果你想以特定的方式组织一个大文件,这个类型将是非常棒的选择。

Diff

在diff文件时使用该特定的折叠类型。我们不会讨论它,因为Vim会自动使用它。

Expr

这让你可以用自定义的Vimscript来决定折叠的位置。它是最为强大的方式,不过也需要最繁重的工作。 下一章我们将讲到它。

Indent

Vim使用你的代码的缩进来折叠。同样缩进等级的代码折叠到一块,空行则被折叠到周围的行一起去。

这是最便捷的方式,因为你的代码已经缩进过了;你仅仅需要启动它。 这将是我们用来折叠Potion代码的第一种方式。

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的filetypepotion时,它都会执行这个文件中的代码。 (因为它位于一个叫potion的文件夹)

将所有的折叠相关的代码放在同一个文件显然是一个好主意,它能帮我们维护我们的插件的繁多的功能。

在这个文件中加入下面一行:

setlocal foldmethod=indent

关闭Vim,重新打开factoria.pn。用zRzMza尝试折叠功能。

一行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.


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)