在看了下面文章后: http://man.chinaunix.net/newsoft/vi/doc/usr_28.html#usr_28.txt
自己总结了一些给自己看的:
(一)首先设置 foldmethod 选项为下面中的某一个:
manual 手工定义折叠: zf
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法加亮来定义折叠
diff 对没有更改的文本进行折叠; 例子: :set diffopt=filler,context:8
marker 对文中的标志折叠; 例子:
(二)对已经创建(自动或者手动均可), 然后可以用这些命令来操作:
假定你已经创建了若干折叠,而现在需要阅览全部文本。你可以移到每个折叠处,并键 入 "zo"。
若要做得更快,可以用这个命令: zr
这将减少 (R-educe) 折叠。
相反的操作是: zm z more
对 Ex 命令的执行范围总是从折叠的第一行到折叠的最后一行。所以,命令::s/foo/bar/g
当光标在关闭的折叠上时,它将在整个折叠里用 "bar" 替换 "foo" 。 对 |:folddoopen| 和 |:folddoclosed| 不会产生这种情况。
对 折 叠 执 行 命令
:[range]
foldd[oopen]{cmd}
对所有不在关闭的折叠中的行执行{cmd}
。 给定[range]
时,仅对范围内那些行起作用。 每次命令被执行时,光标会被定位在要被操作的行上。 就如 ":global" 命令:首先标记出所有不在关闭的折叠中的行。然后 对所有标记过的行,执行{cmd}
。所以当{cmd}
改变了文本的折叠时 ,对命令执行的位置没有影响(当然,删除行例外)。 如::folddoopen s/end/loop_end/ge
使用标志 "e" 要避免当 "end" 不匹配时得到错误消息。 :[range]
folddoc[losed]{cmd}
对所有在关闭的折叠里的行,执行{cmd}
。
这里之前列出的折叠命令并不会新建/删除 折叠对象。 都是对已有的折叠对象执行操作。 下面4个命令则是 新建/删除 折叠对象的:
zf{motion}
或{Visual}
zf 创建折叠操作符 仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。 用 "manual" 方式,新建的折叠会被关闭。
zd 删除 (delete) 在光标下的折叠。当光标在被折叠的行上,该折叠被删除。嵌套的折叠上移一级。在可视模式下(基本上)所有在所选区域的折叠都被删除。注意:这种一次删除多个折叠的简单方法不可恢复。 仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。 zD 循环删除 (Delete) 光标下的折叠。在可视模式下(基本上)所有在所选区域的折叠和嵌套的折叠都被删除。 仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。 zE 除去 (Eliminate) 所有在窗口里的折叠。 仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
注意: 不管怎么删除,都不会删除折叠的文本,只是删除‘折叠对象’。
(三) 折叠间移动: zj zk [z ]z