vim中用marker进行折叠

vim中用marker进行代码折叠

前言

和各种IDE相比,vim默认是没有开启折叠功能的,但在平时代码量较大的文件中,不论是阅读还是调试,频繁的翻页都显得非常繁琐,此时如果能适当进行折叠,效率会高很多,因此在这里简要地介绍一下如何用vim进行代码折叠

简介

首先我们需要知道vim中代码折叠的几种类型,有以下几种:

  1. manual,默认折叠方法,通过自行设定行区间或者选定代码段进行折叠,关闭vim折叠信息会丢失,若想要保存折叠信息,可以在退出文件之前运行:mkview命令,重启后用:loadview命令进行恢复,该命令生成的缓存文件位于~/.vim/view文件夹中,移动或重命名文件,折叠信息依旧会丢失
  2. indent,缩进折叠方法,相同的缩进中的代码会被折叠
  3. syntax,语法高亮折叠,在C/C++中会折叠花括号部分,其它格式代码中有的不能自动进行折叠
  4. marker,标记折叠方法,和manual操作上是一样的,不同之处在于关闭vim折叠信息不会丢失,而且易用控制和标注
  5. diff,对没有更改的文本进行折叠
  6. expr,用表达式来定义折叠

其中,比较常用的是indent和marker两种折叠方式,indent类似于IDE中的折叠方法,而marker明显是一种由于manual的折叠方式,其余四中一般较少使用,此文中主要介绍marker这种方法.

语法

首先我们需要在~/.vimrc中对折叠方式进行配置,涉及到以下几个命令:

设置折叠方法

set foldenable "启用折叠功能
set foldmethod=marker "设置折叠的方法为marker,也可以简写为set fdm=marker,注意等号两边不能有空格

折叠

方法一:

  1. 2G ,将光标跳转到第二行
  2. zf100G, 折叠第二行到第100行的代码,vim会在折叠的开始和结束自动添加三个连续的花括号作为标记

注1:折叠完成后按jk进行上下移动折叠部分会被看做一行,而若是用hl进行左右移动会被认为你想要编辑折叠代码段,折叠部分会自动展开

注2:折叠完成后vim会自动添加三个连续的花括号作为折叠的标记,可以在注释符和花括号之间添加介绍,说明折叠代码段的作用

方法二:

  1. 在normal模式下按v进入visual模式
  2. 选中要折叠的的代码段部分,按zf进行折叠

常用折叠命令

zf : 创建折叠

zF: 在当前行创建折叠,当一开始就计划要折叠所写代码的时候,可以用该命令创建一堆折叠符号,然后再往里面填写内容

:5,10fo : 折叠5到10行的代码

zd: 删除光标下的折叠

zo: 打开光标下的折叠,但是一般用hl左右移动就可以

zD: 删除光标下的折叠,以及嵌套的折叠

zO: 打开光标下的折叠,以及嵌套的折叠

zc: 关闭光标下已打开的折叠

zC: 关闭光标下已打开的折叠,以及嵌套的折叠

za: 当光标在关闭的折叠上时,打开之,当光标在打开的折叠上时,关闭之

zA: 和za效果一致,不过对其嵌套的折叠也有效

[z : 将光标移动到折叠的开始处

z] : 将光标移动到折叠的结束处

zj: 将光标移动到下一个折叠的开始处

zk: 将光标移动到前一个折叠的结束处

以上加粗的部分代表比较常用的命令.


2022年10月26日更新

使用marker进行手动折叠时,会发现当你在一个文档中做了许多折叠,但是关闭文档,再次打开之后所有的折叠都消失了,需要说明的是自动折叠(比如syntax或者indent方法)是不会丢失折叠的,毕竟本来就是自动生成的.折叠信息凭空消失显然是难以接受的.查阅资料可知在关闭文件之前mkview,会将折叠信息(实际上内容远比折叠要多)保存在~/.vim/view目录下的一个文件中,再打开文件时只需要loadview就可以复原之前的折叠状态,但即使这样还是显得有些繁琐,因此我们可以在.vimrc文件中做如下配置实现自动的保存和读取:

au BuffWinLeave * silent mkview
au BufWinEnter * silent loadview

参考

  1. 在vim中运行 :help folding命令,查看折叠的帮助文档
  2. https://blog.csdn.net/zcube/article/details/42325741
  3. https://zhuanlan.zhihu.com/p/27473875
  4. https://www.jianshu.com/p/16e0b822b682
  5. vim保存代码折叠信息
posted @ 2022-10-12 11:42  yukina~  阅读(459)  评论(0编辑  收藏  举报