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 启用折叠
  • 相关阅读:
    JAI丢包掉帧处理
    FirstWriting
    搭建PHP开发环境 apache+MySQL+PHP 安装phpMyAdmin模块
    jQuery基本知识体系图
    WAMP不能启动MYSQL服务
    为图片添加内阴影效果的三种方法
    关于重装系统或还原系统
    初识jQuery,八字真言“选择元素,对其操作”
    JavaScript网站设计实践(七)编写最后一个页面 改进表单
    JavaScript网站设计实践(六)编写live.html页面 改进表格显示
  • 原文地址:https://www.cnblogs.com/schips/p/vim_using_fold.html
Copyright © 2011-2022 走看看