zoukankan      html  css  js  c++  java
  • vim技巧

    (三)多窗口操作

    改变高度:res +n(增加n行的高度)n ctrlw  +/-
    改变宽度:vertical res +n(增加n列的宽度)n ctrl w >/<

    (一)缩进

    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

    (二)折叠

    1. 折叠方式

    可用选项来设定折叠方式:

    可在Vim 配置文件中设置 set fdm=XXX
    可直接在文件中使用注释调用vim命令 /* vim: set fdm=XXX: */

    有6种方法来选定折叠:

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

    注意,每一种折叠方式不兼容,如不能既用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。

    使用时,用 set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。
    要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。

    2. 折叠命令

    选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。

    在可折叠处(大括号中间):

    1
    2
    3
    4
    5
    6
    7
    8
    zc     折叠
    za       切换折叠和非折叠
    zC     对所在范围内所有嵌套的折叠点进行折叠
    zo     展开折叠
    zO     对所在范围内所有嵌套的折叠点展开
    [z     到当前打开的折叠的开始处。
    ]z     到当前打开的折叠的末尾处。
    zj     向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
    zk     向上移动到前一折叠的结束处。关闭的折叠也被计入。

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

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

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    zf       创建折叠,比如在marker方式下:                  
             zf56G,创建从当前行起到56行的代码折叠;                  
             10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。                  
             10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。                  
             在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
     
    zd      删除 (delete) 在光标下的折叠。
            仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
     
    zD      循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。
            仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
     
    zE      除去 (Eliminate) 窗口里“所有”的折叠。
            仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
    zr/R     打开
    zm/M   关闭
  • 相关阅读:
    android ndk通过遍历和删除文件
    SVN提交忽略*.class、.classpath、.mymetadata、.project、.settings、.myeclipse和其他非版本控制文件
    JDBC加载过程
    JVMTI 中间JNI系列功能,线程安全和故障排除技巧
    【Python】Python与文本处理langid工具包的文本语言检测和歧视
    SQL 存储过程 分页
    Android:仿手机QQ朋友动态ListView
    再说Java EE
    辛星与您解读PHP页面跳转的几种实现方式
    VS2010 使用TeeChart画图控件
  • 原文地址:https://www.cnblogs.com/zhaoyl/p/4077654.html
Copyright © 2011-2022 走看看