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

📄 fold.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 2 页
字号:
*fold.txt*      For Vim version 6.3.  最后修改: 2004年6月		  VIM REFERENCE MANUAL    by Bram Moolenaar		      翻译:Zimin<cranecai@users.sf.net>折叠						*Folding* *folding*你可以在用户手册的第 28 章找到有关折叠的序论。|usr_28.txt|1. 折叠方法		|fold-methods|2. 折叠命令		|fold-commands|3. 折叠选项		|fold-options|4. 折叠表现		|fold-behavior|{Vi has no Folding}{not available when compiled without the +folding feature}==============================================================================1. 折叠方法					*fold-methods*可用选项 'foldmethod' 来设定折叠方法。当选项 'foldmethod' 的值不是 "manual" 时,所有的折叠都会被删除并且创建新的。如果设置成了 "manual",将不除去已有的折叠。可以利用这一点来先自动定义折叠,然后手工调整。有 6 种方法来选定折叠:	manual		手工定义折叠	indent		更多的缩进表示更高级别的折叠	expr		用表达式来定义折叠	syntax		用语法加亮来定义折叠	diff		对没有更改的文本进行折叠	marker		对文中的标志折叠手 工						*fold-manual*使用命令来手工定义要折叠的范围。分析文本并发现折叠的脚本也可用这种方法。折叠的级别仅由嵌套次数来定义。要对一定行数的折叠增加级别,可以在相同的几行里再定义折叠。当你退出文件编辑时,手工折叠会被遗弃。要保存折叠,使用 |:mkview| 命令。之后要恢复可以使用 |:loadview|。缩 进						*fold-indent*由缩进行自动定义折叠。折叠级别由缩进行计算而得,用 'shiftwidth' (向下取整)划分。连续的、有同样或更高的折叠级别的行,形成一个折叠。在其中,有更高折叠级别的行形成嵌套的折叠。嵌套的级别数受 'foldnestmax' 选项限制。某些行会被忽略并得到上一行或下一行的折叠级别(取较小值)。符合条件的这样的行要么是空行,要么以 'foldignore' 选项里包含的字符开始。在查找 'foldignore' 里包含的字符时,空格会被忽略。对于 C 使用 "#" 来略过要预处理的那些行。当你想用另一种方式来略过行时,使用 'expr' 方法。在 'foldexpr' 中 |indent()|函数被用来取得一行的缩进。表 达 式						*fold-expr*就象用 "indent" 方式一样,表达式方式的折叠也是由折叠级别自动定义的。选项'foldexpr' 的值被计算并作为一行的折叠级别。如:对所有以 Tab 符开始的连续的几行,创建折叠: >	:set foldexpr=getline(v:lnum)[0]==\"\\t\"调用一函数来计算折叠级别:  >	:set foldexpr=MyFoldLevel(v:lnum)折叠用空行分开的段落:  >	:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1同上:  >	:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1Note:对 escape 类的字符必须使用反斜杠符。(空格,反斜杠,双引号,等等,参考 |option-backslash|)这些是表达式的计算条件:- 当前缓冲和窗口值依所在行而定- 变量 "v:lnum" 被定为该行行号- 计算结果将以一下方式解释:  值			代表 ~  0			这行不折叠  1, 2, ..		这行的折叠级别 1,2 等  -1			折叠级别没有定义,使用这行之前或之后一行的级别值,取			其中较小的一个。  "="			使用上一行的折叠级别。  "a1", "a2", ..	上一行的折叠级别加 1,2,..  "s1", "s2", ..	上一行的折叠级别减 1,2,..  "<1", "<2", ..	这个折叠级别在该行结束  ">1", ">2", ..	这个折叠级别在该行开始不需要用 ">1"("<1")标志折叠的开始(结束)。当这行折叠级别高于(低于)上一行的级别时,折叠将开始(结束)。表达式必须没有副作用。在缓冲里的文字,光标位置,查找模式,选项等等,不能被改动。表达式中有错误或者计算结果不能识别时,Vim 不会产生错误消息,而是将折叠级别设为0。所以当需要调试时,可将 'debug' 选项设为 "msg",错误消息就可以被见到了。Note:由于每一行关于表达式的值都要被计算,这一折叠方式可能会很慢!最好避免使用 "=" , "a" 和 "s" 作为返回值,因为 Vim 不得不经常向后回溯以得到折叠级别。这会降低执行速度。|foldlevel()| can be useful to compute a fold level relative to a previousfold level.  But note that foldlevel() may return -1 if the level is not knownyet.  And it returns the level at the start of the line, while a fold mightend in that line.语 法						*fold-syntax*由带有 "fold" 参数的语法项来定义折叠。|:syn-fold|折叠级别由嵌套的折叠数来定义。嵌套数由 'foldnestmax' 限定。Be careful to specify proper syntax syncing.  If this is not done right, foldsmay differ from the displayed highlighting.  This is especially relevant whenusing patterns that match more than one line.  In case of doubt, try usingbrute-force syncing: >	:syn sync fromstart比 较						*fold-diff*对没有改动的文本或靠近改动的文本自动定义折叠。这个方法仅适用于当前窗口的 'diff' 选项被设定且不同之处被显示时才有效。不然,整给缓冲就是一个大的折叠。选项 'diffopt' 可以指定上下文。即折叠和没有被折叠包括的一处不同之间的行数。如,设定上下文为 8: >	:set diffopt=filler,context:8默认值是6。当设定了 'scrollbind' 选项时,Vim 会试图在其它比较窗口中显示同一个折叠,这样这些窗口就会显示同一处文本。标 志						*fold-marker*在文本中可以加入标志来指明折叠开始和结束的地方。这可以让你精确的定义折叠。这也让你可以放心地删除和复制折叠而不用担心误包括了某些行。选项 'foldtext' 可以显示折叠标志之前的文本。这样做也可以帮助对折叠起名。标志可以包含级别数,也可以使用匹配对。包含级别数较简单,你无须添加结束标志,并可以避免标志不配对的问题。如: >	/* global variables {{{1 */	int varA, varB;	/* functions {{{1 */	/* funcA() {{{2 */	void funcA() {}	/* funcB() {{{2 */	void funcB() {}折叠开始于 "{{{" 标志。接下去的数字决定了折叠级别。产生的效果依当前折叠级别和该折叠标志给定的级别之差而定:1. 如果遇到级别相同,上一个折叠结束,另一个有同样级别的折叠开始。2. 如果标志的级别高,开始一个嵌套的折叠。3. 如果标志的级别低,所有高于当前级别也包括当前级别的折叠结束,且指定级别的折   叠开始。数字指定了折叠级别。不能使用 0。你可以使用 "}}}" 带上一个数字来表示这个级别的折叠结束。此行以下的折叠级别将小于当前指定的级别。Note:Vim 不会回溯匹配的标志(这将耗费太多的时间)。如: >	{{{1	fold level here is 1	{{{3	fold level here is 3	}}}3	fold level here is 2你也可以用一对匹配标志 "{{{" 和 "}}}" 来定义折叠。每个 "{{{" 使折叠级别加1,"}}}" 使折叠级别减1。注意一定要使标志匹配!如: >	{{{	fold level here is 1	{{{	fold level here is 2	}}}	fold level here is 1带数字的标志和没有带数字的标志可以混合使用。对于一个大折叠我们可以使用带数字的标志,在一个函数里我们可以使用不带数字的。如对文件中的 "structure definitions","local variables" 和 "functions" 各区域使用级别1的折叠。对定义和函数使用级别2的标志。而在函数内部使用不带数字的标志。当你在一函数中作更改以分割折叠时,你无须记着标志在那里。选项 'foldmarker' 可设定所用的标志。建议保留默认值 "{{{,}}}"。这样在 Vim 用户间交换文件时就不会出问题。有些时候要编辑的文件必须改变该选项。(如,文件包含了来自另一个编辑器的折叠标志,或对于当前文件的语法折叠标志会产生歧义等)。							*fold-create-marker*"zf" 可通过标志来创建一个折叠。 Vim 将为你插入开始和结束标志。这些标志由'foldmarker' 指定。标志会被添加在行末。'commentstring' 不为空时也会被使用。在以下情况,可能无法正常工作:- 此行已有一个带数字的标志了。Vim 无法判断该如何做。- 在附近的折叠里使用了带数字的标志,使添加被阻。- 这行包含在一注释中,且 'commentstring' 不为空,且嵌套的注释是非法的。如,在 C  的注释中加入 /* {{{ */ ,这将使现有的注释中断。你可以在注释之前或之后添加标志,  或手工添加。总的来说,当你已有带数字的标志时,再让 Vim 为你创建标志不是个好主意。							*fold-delete-marker*"zd" 可用来删除一个用标志定义的折叠。 Vim 将为你删除标志。Vim 将遵照 'flodmarker'在折叠的开始和结束处查找开始和结束标志。如果在标志周围的文字同 'commentstring' 相匹配,这些文字也会被删除。但在以下情况无法正确地执行:- 当一行包含有多于一个的标志且其中一个指定了级别。Vim 不考虑是不是想要的结果,而  仅删除第一个标志。- 当这个标志包含带有数字且同时被用来开始或结束几个折叠时。==============================================================================2. 折叠命令					*fold-commands* *E490*所有的折叠命令用 "z" 开头。提示:如果你从侧面看 "z" 象一张叠起来的纸。创 建 和 删 除 折 叠 ~							*zf* *E350*zf{motion}  或{Visual}zf	创建折叠操作符		仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。		用 "manual" 方式,新建的折叠会被关闭。同时 'foldenable'		会被设定。		参考 |fold-create-marker|。							*zF*zF		对 N 行创建折叠。如 "zf" 。:{range}fo[ld]						*:fold* *:fo*		对 {range} 内的行创建折叠。如 "zf" 。							*zd* *E351*zd		删除 (delete) 在光标下的折叠。当光标在被折叠的行上,该折叠被删除。		嵌套的折叠上移一级。在可视模式下(基本上)所有在所选区域的折叠都		被删除。注意:这种一次删除多个折叠的简单方法不可恢复。		仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。		参考 |fold-delete-marker|。							*zD*

⌨️ 快捷键说明

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