zoukankan      html  css  js  c++  java
  • vim 中代码的折叠和打开

    # vim 中代码的折叠和打开

    reference:

    前言

    在查看代码的时候,如果代码十分冗长,尤其是c/c++系列的时候,代码结构比较让人难以理清,主要是各种注释、括号的匹配问题。

    虽然可以用%来查看匹配的另外一半符号在哪里,但是如果这一对符号之间的代码超过了一页,甚至好几页的话,那么也是比较难以理解的。

    于是可以使用这个vim所提供的折叠功能来简化这些分析。

    折叠的方式:

    方式 意义
    manual 手工定义折叠
    indent 更多的缩进表示更高级别的折叠
    expr 用表达式来定义折叠
    syntax 用语法高亮来定义折叠
    diff 对没有更改的文本进行折叠
    marker 对文中的标志折叠

    用法

    配置:

    可用选项 foldmethod 来设定折叠方式:set fdm=*

    注意,每一种折叠方式不兼容,即:你不能用expr又用marker方式。

    set fdm=indent "设置成marker折叠方式
    

    Vim将折叠等同于行来对待——你可以使用j或k命令,移动跳过包含多行的整个折叠;也可以使用y或d命令,复制或删除某个折叠。

    通常在折叠处向左或向右移动光标,或者进入插入模式,都将会自动打开折叠。我们也可以使用以下命令定义快捷键,使用空格键关闭当前打开的折叠,或者打开当前关闭的折叠。

    :nnoremap <space> za
    

    折叠打开与折合

    选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了。

    如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。

    indent 对应的折叠命令有:

    使用时在大括号中间输入命令。

    • zc 折叠
    • zC 对所在范围内所有嵌套的折叠点进行折叠
    • zo 展开折叠
    • zO 对所在范围内所有嵌套的折叠点展开
    • [z 到当前打开的折叠的开始处。
    • ]z 到当前打开的折叠的末尾处。
    • zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
    • zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。

    当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动。

    可以使用下面的命令来创建和删除折叠:

    • zf 创建折叠,比如在marker方式下:
    zf56G,创建从当前行起到56行的代码折叠;
    10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
    10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
    在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],等)。
    
    • zd 删除 (delete) 在光标下的折叠。仅当 foldmethod 设为 manualmarker时有效。
    • zD 循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。仅当 foldmethod 设为 manualmarker时有效。
    • zE 除去 (Eliminate) 窗口里“所有”的折叠。仅当 foldmethod 设为 manualmarker时有效。

    当我们查看很长的文本时(比如程序代码),可以使用:set foldenable命令来启动折叠。首先将内容按照其结构折叠起来,查看文件的大纲,然后再针对待定的行展开折叠,显示文本的详细内容。

    Manual Fold

    使用以下命令,启用手工折叠。

    :set foldmethod=manual
    

    在可视化模式下,使用以下命令,将折叠选中的文本:

    zf
    

    通过组合使用移动命令,可以折叠指定的行。例如:使用zf70j命令,将折叠光标之后的70行;使用5zF命令,将当前行及随后4行折叠起来;使用zf7G命令,将当前行至全文第7行折叠起来。

    我们也可以使用以下命令,折叠括号(比如()、[]、{}、><等)包围的区域:

    zfa(
    

    Vim并不会自动记忆手工折叠。但你可以使用以下命令,来保存当前的折叠状态:

    :mkview
    

    在下次打开文档时,使用以下命令,来载入记忆的折叠信息:

    :loadview
    

    可以使用以下命令,查看关于手工折叠的帮助信息:

    :help fold-manual
    

    Indent Fold

    使用以下命令,启用缩进折叠。所有文本将按照(选项shiftwidth 定义的)缩进层次自动折叠。

    :set foldmethod=indent
    

    使用zm命令,可以手动折叠缩进;而利用zr命令,则可以打开折叠的缩进。

    使用以下命令,将可以根据指定的级别折叠缩进:

    :set foldlevel=1
    

    可以使用以下命令,查看关于缩进折叠的帮助信息:

    :help fold-indent
    

    Syntax Fold

    使用以下命令,启用语法折叠。所有文本将按照语法结构自动折叠。

    :set foldmethod=syntax
    

    可以使用以下命令,查看关于语法折叠的帮助信息:

    :help fold-syntax
    

    Marker Fold

    使用以下命令,启用标记折叠。所有文本将按照特定标记(默认为{{{和}}})自动折叠。

    :set foldmethod=marker
    

    我们可以利用标记折叠,在文本中同时体现结构和内容,并且能够快速跳转到文件的不同部分。

    可以使用以下命令,查看关于标记折叠的帮助信息:

    :help fold-marker
    

    折叠选项

    使用:set foldcolumn=W命令(W是一个0-12的整数),将在屏幕左侧显示一个折叠标识列,分别用“-”和“+”而表示打开和关闭的折叠。

    使用以下命令,可以查看关于折叠的帮助信息:

    :help folding
    
    命令 意义
    zc 关闭当前打开的折叠
    zo 打开当前的折叠
    zm 关闭所有折叠
    zM 关闭所有折叠及其嵌套的折叠
    zr 打开所有折叠
    zR 打开所有折叠及其嵌套的折叠
    zd 删除当前折叠
    zE 删除所有折叠
    zj 移动至下一个折叠
    zk 移动至上一个折叠
    zn 禁用折叠
    zN 启用折叠
  • 相关阅读:
    cf B. Sereja and Suffixes
    cf E. Dima and Magic Guitar
    cf D. Dima and Trap Graph
    cf C. Dima and Salad
    最短路径问题(floyd)
    Drainage Ditches(网络流(EK算法))
    图结构练习—BFSDFS—判断可达性(BFS)
    Sorting It All Out(拓扑排序)
    Power Network(最大流(EK算法))
    Labeling Balls(拓扑)
  • 原文地址:https://www.cnblogs.com/schips/p/vim_using_fold.html
Copyright © 2011-2022 走看看