(三)多窗口操作

改变高度: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   关闭

vim技巧的更多相关文章

  1. vimcommandfilepatchcmdfold VIM技巧之分隔窗口 一级精华

    VIM技巧之分隔窗口 分类: 技术2010-07-08 09:57 754人阅读 评论(1) 收藏 举报   同时显示两个不同的文件, 或者同时查看同一个文件的两个不同位置, 或者是同步显示两个文件的 ...

  2. VIM技巧(2)-删除匹配行

    VIM技巧(2)-删除匹配行 代码如下: * @Company:中国股份有限公司 * @author ymzhao (也有zyyang的) * @Date: Jan 22, 2014 11:25:29 ...

  3. VIM技巧(1)

    VIM技巧(1) 替换 36s/^\(.* = \)entity.\(.*\)$/\1this.GetShowName("\2",\2); 删除空行 %g/^$/d %g/^\s* ...

  4. 最佳vim技巧

    最佳vim技巧----------------------------------------# 信息来源----------------------------------------www.vim ...

  5. vim技巧:折叠快捷键

    vim技巧:折叠快捷键 以前用的挺熟的,一段时间不用了,快捷键又忘了,不得不重新再看手册,今天专门整理一下,以后查找起来也比较方便. zc 折叠,只折叠最外层的折叠zC 对所在范围内所有嵌套的折叠点进 ...

  6. vim技巧4 删除/保留文本中匹配行

    vim技巧:如何删除/保留文本中特定的行呢? <ol><a href="/ss/ss/www"> show invisibles</a> < ...

  7. Vim技巧之四大模式_普通模式

    Vim技巧之四大模式_普通模式 一见不钟情的普通模式 普通模式以下的强悍操作 什么是操作符 什么是动作命令 误操作怎么办 那种操作更划算 普通模式下的神奇大招 Vim技巧之四大模式_普通模式 众所周知 ...

  8. Vim技巧之四大模式_插入模式

    Vim技巧之四大模式_插入模式 在插入模式中及时更正错误 插入-普通模式 在插入模式模式以下直接粘贴指定寄存器的内容 插入模式中做运算 用字符编码插入很常使用字符 替换已有的文本 Vim技巧之四大模式 ...

  9. vim技巧2

    vim技巧总结-查找 1.查找命令1.1 执行一次查找普通模式下,/会调用查找提示符,如果vim扫描到文档尾部仍没有找到目标,会提示"search hit BOTTOM, continuin ...

  10. 会务准备期间材料准备工作具体实施总结 ----(vim技巧应用, python信息提取与整合, microsoft word格式调整批量化)

    会务准备期间材料准备工作具体实施总结(vim, python, microsoft word) span.kw { color: #007020; font-weight: bold; } code ...

随机推荐

  1. 网站哀悼变灰代码集合 兼容所有浏览器的CSS变暗代码

    下面这些CSS代码可以把网站的网页变为黑白,只需将代码加到CSS文件或网页最顶端就可以实现素装.建议全国站长动起来.为遇难的同胞哀悼. 如何将网站变成灰色调呢,网站变灰色方法是什么?有哪些?为了方便大 ...

  2. 格雷码原理与Verilog实现

    格雷码原理 格雷码是一个叫弗兰克*格雷的人在1953年发明的,最初用于通信.格雷码是一种循环二进制码或者叫作反射二进制码.格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点 ...

  3. Jquery揭秘系列:Validation实现

    之前讲了一部分揭秘系列的东西,由于年初的时候在改项目,也没有写下去.现在开始闲下来了,会继续写没写完的东西,各种原生js实现Jquery的功能. 转入正题,说一下今天要讲的东西. 相信很多tx在项目里 ...

  4. hdu2586 LCA

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  5. Win10家庭版升级专业版密钥

    步骤如下: Win10 Home 版本基础上,设置—更新安全—激活—更改产品密钥(或者 我的电脑右键—属性—右下角更改产品密钥),输入 VK7JG-NPHTM-C97JM-9MPGT-3V66T

  6. 数据结构图文解析之:AVL树详解及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  7. Codeforces Round #238 (Div. 2) D. Toy Sum(想法题)

     传送门 Description Little Chris is very keen on his toy blocks. His teacher, however, wants Chris to s ...

  8. Python中的file和open简述

    help(file) help(open) 老规矩先看一下内置的帮助文档怎么描述file和open,毕竟官方文档是最直接最准确的描述. Help on class file in module __b ...

  9. .Net 中的反射(反射特性) - Part.3

    反射特性(Attribute) 可能很多人还不了解特性,所以我们先了解一下什么是特性.想想看如果有一个消息系统,它存在这样一个方法,用来将一则短消息发送给某人: // title: 标题:author ...

  10. 图解JVM的Class文件格式(详细版)

          了解JAVA的Class文件结构有助于掌握JAVA语言的底层运行机制,我在学习的过程中会不断的与ELF文件格式作对比(当然他们的复杂程度.格式相去甚远,比如可执行ELF的符号表解析在静态链 ...