VIM使用系列:缩进调整、自动补全、折叠、跳转


VIM使用系列:缩进调整、自动补全、折叠、跳转
 
缩进调整、自动补全、折叠、跳转这些vim操作都是一开始我也不会,在项目开发过程中熟悉掌握的,本文主要记录一下这些操作的命令,以及查找帮助,为分享也为备忘。
 
缩进调整
 
缩进调整的帮助查找命令: :help shift-left-right,或者直接help下面缩进调整的任意一个命令。缩进调整操作的执行与vim中的shiftwidth参数的值有关系,在vimrc配置文件中,已经将shiftwidth设置为4,表示每一次缩进的宽度均为4个空格长,可以参照进行修改。
 
以下为常用的缩进快捷操作和命令:
 
当前行向右缩进一次:操作 >> 或者输入命令 :>
当前行向左缩进一次:操作 << 或者输入命令 :<
从第m行起,到第n行止向右缩进一次: 输入命令 :m,n> 等价于命令 :m>(n-m+1)
从第m行起,到第n行止向左缩进一次: 输入命令 :m,n< 等价于命令 :m<(n-m+1)
从第m行起共n行向右缩进一次: 输入命令 :m>n 等价于命令 :m,m+n-1>
从第m行起共n行向左缩进一次: 输入命令 :m
自动补全
在windows中使用SourceInsight工具编辑代码时,函数、变量的自动补全功能是很强大、很受欢迎的,可以大大地提高工作效率。在vim中也有一样的功能,也许没有那么方便,稍微需要增加一些按键(可能需要自己进行一点复杂的设置也可以实现SourceInsight的自动弹出),但是也足够使用了。
 
自动补全可以简单地分为两块:单词的自动补全 和 程序代码中符号、函数的自动补全,从本质上来说都是基于单词的补全,但是代码中的补全有其特殊性,主要是结构成员的补全这里。因此两者的操作命令也就稍有不同。
 
单词自动补全:在inset模式下按如下组合键,ctrl+x ctrl+n 或者 ctrl+x ctrl+p
 
或者直接按组合键ctrl+n 或 ctrl+p,前者将列出当前缓冲中符合的条件的词,而后者还将包括字典中的符合条件的词。查看详细帮助::help ^x^n
 
代码自动补全:在inset模式下按如下组合键,ctrl+x ctrl+o,查看详细帮助: :help ^x^o
 
代码的自动补全环境要求稍微复杂一点。
 
首先,它使用的补全叫Omni Completion, 这里涉及到vim中变量omnifunc的设置,这进一步就涉及到文件类型的识别、关联。因此第一步是需要打开vim中的文件类型自动检测,在前面的vimrc配置文件中已经设置了,即: filetype on。vim中默认可以识别不少文件类型,如:C语言的源文件、java程序文件、html程序文件等等,也就会自动根据文件类型设置omnifunc的值。
 
其次,omni补全需要使用tags文件中的信息来实现,而且最好是Exuberant Ctags工具生成的tags文件,因此第二步就是安装该工具,并使用它生成项目的tags文件。
 
最后,omni补全因为使用tags中的信息实现,因此只能对代码中的全局变量、全局类型、函数、结构成员、类成员进行补全,而不能对代码中的局部变量进行补全,局部变量的补全使用上面的单词补全方式实现。
 
补充:项目开发中都会使用很多的C标准函数、系统调用等,而包含这些函数的头文件并没有被包含在tags文件中,也就不会提示自动补全,为了提高效率实现更全面的自动补全,可以把标准函数、系统函数的tags补充到vim中,方法是先建立系统头文件的tags文件,然后添加到vimrc配置文件中,如下:
 
1
ctags -R -f ~/.vim/systags /usr/include /usr/local/include
然后将 set tags+=~/.vim/systags 设置添加到第二文中的.vimrc配置文件中。这样不仅是补全更高效,而且也是跳转更全面。
 
从补全列表中选择,向下移动:ctrl+n ,向上移动:ctrl+p,然后按任意键结束补全,注意这个键还是会被输入,所以好的选择是按空格键。
 
折叠
代码的折叠,可以方便掌控程序的主要逻辑,也便于代码的阅读、查找。使用折叠,首先要设置折叠方式,即设置vim中fdm(foldmethod的缩写)的值,在系列第二文的配置文件中已经将fdm设置为indent,即依据代码的缩进进行自动折叠。vim中有六种fdm可以设置,参考详细帮助: :help fold。常用的折叠打开、关闭操作如下:
 
折叠代码: 快捷按键 zc
递归折叠代码: 快捷按键 zC
取消代码折叠: 快捷按键 zo
递归取消折叠代码: 快捷按键 zO
折叠文件中的所有代码: 快捷按键 zM
取消文件中所有代码的折叠: 快捷按键 zR
对第m行到第n行进行折叠: 打开折叠,使用命令: :m,nfoldopen, 关闭折叠,使用命令: :m,nfoldclose
在折叠代码中的上下移动: 在打开的折叠中:[z ]z 在关闭的折叠中:zj zk (一试便知)
跳转
在SourceInsight中想要跳转到某个函数,只需要按住shift键,然后点击鼠标左键就可以了,在vim中同样很简单快速,直接按组合键ctrl_]就可以了,当然前提条件是已经生成了tags文件,并设置好了。查看详细的帮助::help ^]。
 
跳转到函数、全局结构、全局变量等tag: 组合键 ctrl_]
从tag处返回跳转的位置:组合键 ctrl_t
跳转到全局变量处: 快捷键 gD
跳转到局部变量处: 快捷键 gd
返回到上一个操作位置(上一次光标位置): 组合键 ctrl_o
返回到下一个操作位置(更新的光标位置): 组合键 ctrl_i
本来打算把quickfix的操作也放到本文的,但是写本文已经花了将近一个半小时了,那就放到系列的下一篇文章来写吧,刚好quickfix也是vim中与文本编辑、代码编辑关系不大的一部分,主要是涉及到代码的编译、调试,大大提高编译-改错-编译流程的效率,也算是vim的一大特色功能,所谓的剑不离手,我一直觉得在SourceInsight中不能直接进行编译是一大遗憾,这个遗憾在vim中得到了弥补,哈哈。
 

相关内容

    暂无相关文章