vim 中OmniCppComplete的安装和使用

来源:互联网 发布:linux patsubst 编辑:程序博客网 时间:2024/05/22 03:02

http://blog.csdn.net/duguteng/article/details/7417181

将vim 改造成功能强大的IDE系列之三

『插件介绍』

onmicppcompete功能:

  • 命名空间(namespace),类(class),结构(struct)和联合(union)补全
  • 函数属性成员和返回值类型补全
  • "this"指针成员补全
  • C/C++类型转换(cast)对象补全
  • 类型定义(typedef)和匿名类型(anonymous types)补全

按理说可以显示函数原型,但是我的不可以,不知道为什么?

有图有真相:



『下载和安装』

从http://www.vim.org/scripts/script.php?script_id=1520下载安装包后。

       1)进入~/.vim目录,将安装版解压缩

       2)进入~/.vim/doc目录,在Vim命令行下运行"helptags .”

       3)在~/.vimrc中加入以下几行:

[html] view plaincopyprint?
  1. set nocp    
  2. filetype plugin on   

      4)启动Vim后使用以下命令为Vim添加omnicppcomplete帮助信息
[html] view plaincopyprint?
  1. :helptags ~/.vimrc/doc   
     5)使用ctags生成标签库
对于C++代码,需要在~/.ctags 中加入下面几个选项(去除中文):
[html] view plaincopyprint?
  1. --c++-kinds=+p : 为标签添加函数原型(prototype)信息  
  2. --fields=+iaS : 为标签添加继承信息(inheritance),访问控制(access)信息,函数特征(function Signature,如参数表或原型等)  
  3. --extra=+q : 为类成员标签添加类标识  

至此,安装结束!

『基本功能使用方法』

在配置好Vim,并生成了ctags标签库前提条件下,Vim中在输入 “xxx." 或者 "xxx->" 时会弹出如下补全提示:

[html] view plaincopyprint?
  1. +-------------------------------------+    
  2. |method1(   f  +  MyNamespace::MyClass|    
  3. |_member1   m  +  MyNamespace::MyClass|    
  4. |_member2   m  #  MyNamespace::MyClass|    
  5. |_member3   m  -  MyNamespace::MyClass|    
  6. +-------------------------------------+    
  7.     ^       ^  ^          ^    
  8.    (1)     (2)(3)        (4)    

其中1为符号名称;2为符号类型;3为访问控制标识;4为符号定义所在域(scope)。

 符号名称

1为omnicppcomplete所查找到的可选符号(symbol)名称,如以'('结尾,则为函数。

按理说可以显示函数的原型,但是我的不可以,不知道为什么?

 符号类型

符号的类型,可能的值为

  • c : 类(class)
  • d : 宏(macro definition)
  • e : 枚举值(enumeator)
  • f : 函数(function)
  • g : 枚举类型名称
  • m : 类/结构/联合成员(member)
  • n : 命名空间(namespace)
  • p : 函数原型(function prototype)
  • s : 结构体名称(structure name)
  • t : 类型定义(typedef)
  • u : 联合名(union name)
  • v : 变量定义(variable defination)

访问控制

类成员访问控制,取值:

  • + : 公共(public)
  • # : 保护(protected)
  • - : 私有(private)

符号定义所在域

符号在何处被定义。

『常用配置选项』

Vim中,可以通过以下选项控制omnicppcomplete查找/补全方式:

  • OmniCpp_GlobalScopeSearch : 全局查找控制。0:禁止;1:允许(缺省)
  • OmniCpp_NamespaceSearch : 命名空间查找控制。
    • 0 : 禁止查找命名空间
    • 1 : 查找当前文件缓冲区内的命名空间(缺省)
    • 2 : 查找当前文件缓冲区和包含文件中的命名空间
  • OmniCpp_DisplayMode : 类成员显示控制(是否显示全部公有(public)私有(private)保护(protected)成员)。
    • 0 : 自动
    • 1 : 显示所有成员
  • OmniCpp_ShowScopeInAbbr : 选项用来控制匹配项所在域的显示位置。缺省情况下,omni显示的补全提示菜单中总是将匹配项所在域信息显示在缩略信息最后一列。
    • 0 : 信息缩略中不显示匹配项所在域(缺省)
    • 1 : 显示匹配项所在域,并移除缩略信息中最后一列
  • OmniCpp_ShowPrototypeInAbbr : 是否是补全提示缩略信息中显示函数原型。
    • 0 : 不显示(缺省)
    • 1 : 显示原型
  • OmniCpp_ShowAccess : 是否显示访问控制信息('+', '-', '#')。0/1, 缺省为1(显示)
  • OmniCpp_DefaultNamespaces : 默认命名空间列表,项目间使用','隔开。
    如:let OmniCpp_DefaultNamespaces = ["std', "MyNamespace"]
  • OmniCpp_MayCompleteDot : 在'.'号后是否自动运行omnicppcomplete给出提示信息。0/1, 缺省为1
  • OmniCpp_MayCompleteArray : 在"->"后是否自动运行omnicppcomplete给出提示信息。0/1, 缺省为1
  • OmniCpp_MayCompleteScope : 在域标识符"::"后是否自动运行omnicppcomplete给出提示信息。0/1, 缺省为0
  • OmniCpp_SelectFirstItem : 是否自动选择第一个匹配项。仅当"completeopt"不为"longest"时有效。
    • 0 : 不选择第一项(缺省)
    • 1 : 选择第一项并插入到光标位置
    • 2 : 选择第一项但不插入光标位置
  • OmniCpp_LocalSearchDecl : 使用Vim标准查找函数/本地(local)查找函数。Vim内部用来在函数中查找变量定义的函数需要函数括号位于文本的第一列,而本地查找函数并不需要。

『阅读说明』

    1)Vim存在多个配置文件vimrc,比如/etc/vimrc,此文件影响整个系统的Vim。还有~/.vimrc,此文件只影响本用户的Vim。而且~/.vimrc文件中的配置会覆盖/etc/vimrc中的配置。这里我们只修改~/.vimrc文件。

    2)Vim的插件(plugin)安装在Vim的runtimepath目录下,你可以在Vim命令行下运行"set rtp“命令查看。这里我们选择安装在~/.vim目录,没有就创建一个。

    3)当本文说”在Vim命令行下运行cmdxx命令“时,意思是指在Vim的命令行模式下运行cmdxx命令,即在Vim的正常模式下通过输入冒号":"进入命令行模式,然后紧接着输入命令cmdxx。在后文描述中都会省略冒号":"输入。

    4)如果没有说明“在Vim命令行下运行某命令”,则是在shell中执行该命令。

    5)如果命令中间被空白符间隔或有与正文容易混淆的字符,我会用双引号将命令与正文区分。所以读者在实际操作时,不要输入命令最前面和最后面引号。

    6)本文关于组合快捷键的描述,形如a-b形式的快捷键表示同时按下a键和b键,而形如"a-b c"形式的快捷键,则表示先同时按下a键和b键,然后放开ab键,再按下c键。

    7) 本人使用的系统是Ubunt 11.10 ,Vim版本是Vi IMproved 7.3




另外,还需确认在 vimrc 中开启了 filetype 选项,不然 OmniComplete 无法自动识别 C/C++ 文件类型进行补全。

这样,在插入模式编辑 C/C++ 源文件时按下 .->::,或者手动按下 Ctrl+X Ctrl+O 后就会弹出自动补全窗口,此时可以用 Ctrl+N 和 Ctrl+P 上下移动光标进行选择。




http://blog.chinaunix.net/uid-20263484-id-110026.html

这几天用VIM写程序,快被omnicppcomplete的那个预览窗口给烦死了,那个窗口一下来就把结构体的补全菜单赶得到处跑,真的烦死了。。。。
    于是查阅omnicppcomplete的文档,发现这么一句:

    If the 'completeopt' option contains the setting "preview" (this is the
    default value), you will see a preview window during the completion.

    我查了一下发现我的completeopt设置为menu,preview
    于是直接在.vimrc里写入set completeopt=menu就好了,谢天谢地。
   
    下面是文档的一个链接(很详细,我的以前让我删了):
    omnicppcomplete.txt


0 0