vim的折叠、智慧缩排

折叠:   

    vim里的折叠命令都以z开头,有6种折叠方式:manual,indent,expr,syntax,diff,marker。其中,manual所最基本的,它的命令是通用的,掌握了manual的基本命令,折叠也就差不多了。要确认折叠功能开启:set foldenable。

    对折叠基本操作(当前光标所在之折叠):za(切换折叠状态),zc(关闭折叠,就是折叠起来),zd(删除折叠),当a、c、d大写时,则动作是递归的。创建折叠是zf结合光标移动命令(将光标放在函数的开括号上,用zf%,可方便的将函数折起来)。z0递归打开折叠。

    折叠里面有个基本概念,即折叠层次,就是设置foldlevel选项的值,zM将foldlevel置0,zm、zr分别使foldlevel递减与递增。foldlevel与indent类型的折叠连用,就算所谓的大纲折叠(set foldmethod=indent),它根据自动缩排shiftsidth的值进行折叠,最外一层的缩排为第0层次,由此往里数,大纲折叠会将foldlevel层次里的缩排折叠起来。这种折叠与zr、zm连用,看代码比较方便。

    :set foldcolumn=n命令定义了左折叠栏的宽度,默认是0。该栏用“|”显示折叠层次。

    :set foldmethod=syntax,即用语法定义折叠,它会将C代码里相应的大括号折叠起来。

缩排

    vim提供4种缩排,:set indenttype。indenttyep可为autoindent、smartindent、cindent、indentexpr。其中,autoindent与vi的autoindent类似,smartindent则是对其做了点加强,可识别基础C语法,如下:

     a、在{后的下一行

     b、以cinwords选项中包含的关键字开始的行

     c、以}结尾的新行

     d、光标在含}的行上,用大写字母O命令,可向上创建新的一行,自动缩排

    cindent和indentexpr比较适合C程序员。cindent定义了一般C代码里需要的缩排,而indentexpr则威力更强,更灵活,可随意定义自己的缩排风格。cindent的动作由三个选项定义:

    1、cinkeys,定义了一些键盘按键组合,vim遇到它们时会重新估算当前行的缩排,选项里面的值用逗号分隔:如0{,0},0),:,0#,!^F,o,O,e,其中0x表示一行的开头是字符x是,重新估算当前缩排,对于0#,它的缩排距离与前一个#开头的行相同,#define就很方便了;对于冒号,若:是段标签或case语句,则重新估算缩排。!x表示,当按下x键时,重新估算当前行缩排,注意是插入模式下的按键,默认是CTRL+F;o表示当创建任意行时,估算新建行的缩排,无论是插入模式的回车还是命令模式的o命令;O表示在当前行之上创建的新行;e就是else,直到else的最后一个e之前,vim不会识别这种情况。

    此外,cinkeys还有个专用关键字,如=word和=~word,一旦新行中出现匹配字串word,重新估算缩排,=~word与=word相反,即不出现它的话,估算缩排,且忽略大小写。

    2、cinwords,定义了一些关键字,输入这些关键字时,下一行将触发额外的缩排,其默认值是:if,else,while,do,for,switch。这些关键字要分大小写的。

    3、cinoptions,这个选项控制vim在C的上下文中重新缩排文本行的行为。:set cinoptions=选项值,它的选项值比较多,下面列举一些常用的。

          fn,{n,设置方式为:set cinoptions=fn,{n,fn是定义了非嵌套的花括号"{"的缩排距离,默认是0,{与f的行为同,只是它套用到嵌套的开始花括号"{",默认也是0。

          }n,定义结尾的花括号"}"的偏移量,默认为0。

          :n,=n,bn,这三个控制case语句的缩排,:n使得vim将case的标签缩排n个字符(从对应的switch语句开始计算),默认是一个shiftwidth,=n是的case下的行相对于case的缩排,默认是shiftwidth,bn定义了break语句的位置,默认是0,即与相应的case对齐。

          )n,*n,这2个设置扫描行数,)n设定vim寻找非结尾括号的行数,默认是20,*n是设置寻找为结束的注释扫描行,默认是30。

          cinoptions已经有比较全的默认值了,基本不用我们修改。

总结:cinkeys和cinwords定义了触发vim重新估算缩排的键和动作,vim则是根据cinoption里的设定来进行或重新进行缩排

    indentexpr的设置回覆盖cindent。目录$VIMRUNTIME/indent下,有很多编程语言对应的缩排格式文件,在.vimrc文件中载入它们便可用了。关闭缩排的命令式:filetype indent off

    当粘贴文本时,自动缩排可能会使得文本很乱,只要:set paste,就可粘贴纯文本,不会被缩排,用:set nopasete恢复自动缩排。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值