一个人的战争

自己动手扩展vim插件——code_complete.vim篇

By 马冬亮(凝霜 Loki)

一个人的战争()

插件简介

code_complete.vim是一款通用插件,具有用于补全函数参数,插入代码片段等功能。目前插件作者已经将项目迁移到GitHub上进行托管。

下图是官方的Demo(函数参数补全功能要配合ctags使用):

插件安装

将code_complete.vim拷贝至~/.vim/plugin目录下。

利用Ctags生成tags文件(在代码目录下运行,递归解析当前文件夹),代码如下:

ctags -R –c++-kinds=+p –fields=+iaS –extra=+q –language-force=C++ . 将生成的tags文件名改成xxx_tags,拷贝至~/.vim/tags目录中,在~/.vimrc中加入如下代码:

set tags+=~/.vim/tags/xxx_tags

插件使用

此款插件使用非常简单,只需使用<tab>键即可触发相应的功能,下面将详细讲解具体的用法:

注释

code_complete插件提供两种风格的注释,一种是/* */形式的标准C语言注释,而另一种是/**< */形式的Doxygen风格的用于在一行后进行注释的文档注释(此插件没有提供自动生成函数文档注释的功能,此功能可以使用更专业的插件DoxygenToolkit.vim来实现)。

预处理命令

头文件包含

C语言逻辑结构

主函数

namespace

函数参数补全

插件局限性

通过上面的演示,我们发现了此款插件的一些局限性:

插件扩展 自定义代码风格

下面以if else结构进行说明,我们先查看没有更改前的代码:

let g:template[‘c’][‘ife’] = "if( ".g:rs."…".g:re." )\&;cr>{\&;cr>".g:rs."…".g:re."\&;cr>} else\&;cr>{\&;cr>".g:rs."…". g:re."\&;cr>}" 我们来查看其在vim中的样式:

在if的括号中,条件表达式与括号间有一个空格,这和我们的风格不一致,我们可以按照如下代码进行更改:

let g:template[‘c’][‘ife’] = "if (".g:rs."…".g:re.")\&;cr>{\&;cr>".g:rs."…".g:re."\&;cr>} else\&;cr>{\&;cr>".g:rs."…".g:re."\&;cr>}" 注:在VimScript中,字符串可以是"或’形式的字符串,字符串使用.进行连接,\&;cr>是键盘上的回车,\用于在字符串中进行转义。查看vim中的按键映射,在vim中使用:helpkeycode进行查看。let g:template[‘c’][‘xxx’]中的[xxx]是代码补全的触发序列。

对于其它逻辑结构,主要都是空格与我们的风格不一致,可按以上原则进行定制。

ifelse结构和switch结构定制

下面我以ifelse结构演示我扩展后的插件,代码会在后面给出:

对于扩展后的if else结构,其用法为:

ife[x]<tab> 在插入模式下输入ife,后面接else if()的分支个数,然后按<tab>键展开。

我扩展了0~9的分支情况,下面给出0~3的代码定义:

可以一个人,可以几个人,一起放松那劳累的心情或者劳累自己的身体,

一个人的战争

相关文章:

你感兴趣的文章:

标签云: