⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usr_28.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 2 页
字号:
使用 |zf| 来定义一个折叠很费事。如果你的文本依循一种结构,以较多的缩进表示较低的层次,那么,你可以采用缩进折叠的方法。这将为每一系列有相同缩进的行创建一个折叠。缩进较多的行将成为嵌套的折叠。缩进折叠适用于许多编程语言。我们来试试这个方法。先设定 'foldmethod' 选项: >	:set foldmethod=indent然后你可以用 |zm| 和 |zr| 命令增加和减少折叠。在下面这个例文上很容易看明白:本行没有缩进	本行被缩进一次		本行被缩进两次		本行被缩进两次	本行被缩进一次本行没有缩进	本行被缩进一次	本行被缩进一次Note 缩进多少和折叠深度之间的关系倚赖于 'shiftwidth' 选项。每个 'shiftwidth'选项规定的缩进宽度,在折叠深度上加一。这被称为一个折叠水平。当你使用 |zr| 和 |zm| 命令时,你实际上是在增加或减少 'foldlevel' 选项。你也可以直接设置它: >	:set foldlevel=3这意味着,所有缩进等于或大于 'shiftwidth' 三倍的折叠将被关闭。折叠水平设定得越低,越多的折叠将被关闭。当 'foldlevel' 为零时,所有的折叠都将被关闭。|zM| 把 'foldlevel' 设为零。相反的命令 |zR| 把 'foldlevel' 设为文件中最深的折叠水平。因此,有两种方法开启和关闭折叠:(A) 设定折叠水平。    这提供了一种极快的 "缩小" 方法来查看文本结构,移动光标,以及重新 "放大"     文本。(B) 利用 |zo| 和 |zc| 命令打开和关闭指定的折叠。    这个方法允许你仅仅打开那些你要打开的折叠,而不影响其它的折叠。这两种方法可以结合起来用: 你可以先用几次 |zm| 以关闭大多数折叠,然后用 |zo| 打开一个指定的折叠。或者,用 |zR| 打开所有的折叠,然后用 |zc| 关闭指定的折叠。但是,当折叠方法 'foldmethod' 的值为 "indent" 时,你不能手动定义折叠。因为那样会引起缩进宽度和折叠水平之间的冲突。在参考手册中有更多关于缩进折叠的内容: |fold-indent|==============================================================================*28.6*	依标记折叠文本中的标记用于指定一个折叠区的起点和终点。标记折叠可以精确地控制一个折叠究竟包含哪些行文本。缺点是那些文本需要改动。试试这个: >	:set foldmethod=marker以下列 C 程序片段为例:	/* foobar () {{{ */	int foobar()	{		/* return a value {{{ */		return 42;		/* }}} */	}	/* }}} */请注意,折叠行将显示位于标记符之前的文字。这正好用来说明该折叠包含了什么。令人十分困扰的是,当某些文本行移动后,标记不再正确地配对。这种局面可以利用编号标记来避免。例如:	/* global variables {{{1 */	int varA,varB;	/* functions {{{1 */	/* funcA() {{{2 */	void funcA() {}	/* funcB() {{{2 */	void funcB() {}	/* }}}1 */每一个编号标记表示一个编号指定水平的折叠的开始。这将使任何较高层次的折叠在此结束。你可以只用编号标记的开始符定义所有的折叠。只有当你要明确地在另一个开始前结束一个折叠时,你才需要加一个标记停止符。在参考手册中有更多关于标记折叠的内容: |fold-marker|==============================================================================*28.7*	依语法折叠Vim 为每一种不同的语言使用一个不同的语法文件。语法文件为文件中各种不同语法项定义颜色。如果你正用 Vim 在一个支持色彩的终端上阅读本文,你所看见的色彩就是由 语法文件 "help" 定制的。   在语法文件中,你可以加入一些带有 "fold" 参数的语法项。这些语法项将定义折叠区。这要求写一个语法文件,把这些项目加入其中。编写这样一个文件是不容易的。但是一旦写成,所有折叠的创建就变成自动的了。   在此,我们将假定你正使用一个已经写好的语法文件。这样的话,就没更多解释的必要了。你可以像以上解释过的那样打开和关闭折叠。你也可以在编辑文件时自动创建和删除那些折叠。在参考手册中有更多关于语法折叠的内容: |fold-syntax|==============================================================================*28.8*	依表达式折叠表达式折叠类似于缩进折叠,但并非利用文本行的缩进,而是调用一个函数来计算一行的折叠水平。当文本的一部分表明那些行属于同一组时,你可以使用这个方法。一个例子是电子邮件,其中引述的文本由行首的 ">" 来表示。要折叠这些引文,可以用以下命令: >	:set foldmethod=expr	:set foldexpr=strlen(substitute(substitute(getline(v:lnum),'\\s','',\"g\"),'[^>].*','',''))你可以在这段文本上试式看:> quoted text he wrote> quoted text he wrote> > double quoted text I wrote> > double quoted text I wrote以下是上例中 'foldexpr' 的解释 (自里至外):   getline(v:lnum)			读取当前行   substitute(...,'\\s','','g')		从当前行删除所有空白字符   substitute(...,'[^>].*','',''))	删除行首那些 '>' 之后的任何字符   strlen(...)				计数字符串的长度,即 '>' 的个数Note 在 ":set" 命令中,每一个空格,双引号和反斜线符之前,必须插入一个反斜杠。如果这会把你搞糊涂,那么就执行  >	:set foldexpr来检查所产生的实际值。为了修正一个复杂的表达式,请使用命令行补全: >	:set foldexpr=<Tab>其中 <Tab> 是一个真实的 Tab 键。Vim 将填入以前的值,然后你可以编辑它。当该表达式变得相对复杂时,你应当将其放入一个函数。然后设定 'foldexpr'来调用该函数。在参考手册中有更多关于表达式折叠的内容: |fold-expr|==============================================================================*28.9*	折叠未被改动的行当你在同一窗口也设定 'diff' 选项时,这种折叠方法就很有用。|vimdiff| 命令为你设定好了使用未改行折叠。例如: >	setlocal diff foldmethod=diff scrollbind nowrap foldlevel=1在显示同一文件的不同版本的每个窗口内执行这个命令。你将清楚地看到不同文件间的区别,因为那些没改动的文本都被折叠起来了。更多细节参见 |fold-diff|。==============================================================================*28.10* 使用哪种折叠办法呢?所有这些可能性让你感到纳闷,你究竟应该选择哪种方法。不幸的是,没有放之四海皆准的法则。这里只给出一些提示。如果存在一个语法文件,其中定义的折叠符合你正在使用的程序语言,那么,语法折叠应该是最好的选择。否则,你也许得试着写一个。这要求你相当的了解关于查找模式知识。这并非易事。但一旦写成,你将不必以手动的方式定义折叠了。键入命令,手动折叠一个个文本区的方法可用于无结构特点的文本。然后用 |:mkview|命令来储存和还原折叠状态。标记折叠法要求你修改文件。如果你与它人共享这个文件,或不得不遵守公司规定的标准,那么你也许得不到许可给文件加标记。   标记折叠的主要优点是,你可以精确的把标记放在你要的位置。那样就避免了那种在你剪切和粘贴折叠时漏了几行文本的情况。并且,你还可以加个注释,说明该折叠包含些什么。缩进折叠法是那种在许多文件里都用的着。但并不是每次都能成功。当你无法采用其它方法时,就用这种。然而,缩进折叠在做提纲时特别有用。你必须为每一层嵌套折叠特意的使用用同一缩进宽度 'shiftwidth'。表达式折叠法能够在几乎任何依循某种格式的文本中创建折叠。这种方法相当简单,尤其当折叠的开始和结束处能容易地被识别的时候。   如果你用 "expr" 方法来定义折叠而无法得到完全满意的结果。那么你可以切换到手动方法 "manual" 。这么做不会删除那些已经定义好了的折叠。之后你便可以手动删除或增加折叠了。==============================================================================下一章: |usr_29.txt|  在代码间移动版权: 参见 |manual-copyright|  vim:tw=78:ts=8:ft=help:norl:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -