zoukankan      html  css  js  c++  java
  • vim自动补齐插件onmicppcompete

    转自http://blog.csdn.net/duguteng/article/details/7417181#t4

    vim自动补齐插件onmicppcompete

    『插件介绍』

    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中加入以下几行:

    1. set nocp    
    2. filetype plugin on   

        

        4)启动Vim后使用以下命令为Vim添加omnicppcomplete帮助信息

    1. :helptags ~/.vim/doc   

          5)使用ctags生成标签库
      对于C++代码,需要在~/.ctags 中加入下面几个选项(去除中文):

    1. --c++-kinds=+p : 为标签添加函数原型(prototype)信息  
    2. --fields=+iaS : 为标签添加继承信息(inheritance),访问控制(access)信息,函数特征(function Signature,如参数表或原型等)  
    3. --extra=+q : 为类成员标签添加类标识  

       6)参数配置(可选)

      在 vimrc 文件中加入

      " ctags 索引文件 (根据已经生成的索引文件添加即可, 这里我额外添加了 hge 和 curl 的索引文件) 
      set tags+=D:/ctags/tags/cpp set tags+=D:/ctags/tags/hge 
      set tags+=D:/ctags/tags/curl " OmniCppComplete 
      let OmniCpp_NamespaceSearch = 1
      let OmniCpp_GlobalScopeSearch = 1
      let OmniCpp_ShowAccess = 1 
      let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表 
      let OmniCpp_MayCompleteDot = 1   " 输入 .  后自动补全
      let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全 
      let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全 
      let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
      " 自动关闭补全窗口 
      au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif 
      set completeopt=menuone,menu,longest

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

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

    界面美化

    也许你也已经注意到了一个问题,那就是「自动补全窗口的配色非常之丑」,Vim 自带的几个配色方案中只有两三种配色改掉了自动补全窗口丑陋的紫色,其它的基本上都是很逆天的用灰色表示当前选中项、紫色表示其他项。

    要改变自动补全窗口的配色可以在 vimrc 中加上:

    highlight Pmenu    guibg=darkgrey  guifg=black 
    highlight PmenuSel guibg=lightgrey guifg=black

    Pmenu 是所有项的配色,PmenuSel 是选中项的配色,guibg 和 guifg 分别对应背景色和前景色。


    至此,安装结束!

    『基本功能使用方法』

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

    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)
    • : 函数(function)
    • g : 枚举类型名称
    • m : 类/结构/联合成员(member)
    • : 命名空间(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

  • 相关阅读:
    (转)dubbo远程调用细节
    (转)Dubbo扩展点实现细节
    (转)dubbo design
    (转) java中try/catch性能和原理
    mybatis入门基础(九)----逆向工程
    客观评价下软件培训机构
    mybatis入门基础(八)-----查询缓存
    mybatis入门基础(七)----延迟加载
    mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
    为什么我不推荐大家去外包公司
  • 原文地址:https://www.cnblogs.com/wangj08/p/2936851.html
Copyright © 2011-2022 走看看