vim自动补齐插件onmicppcompete

2024-03-17 17:08

本文主要是介绍vim自动补齐插件onmicppcompete,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q

将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 plain copy print ?
  1. set nocp    
  2. filetype plugin on   

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

至此,安装结束!

『基本功能使用方法』

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

[html] view plain copy print ?
  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

原文:blog.csdn.net/duguteng/article/details/7417181

这篇关于vim自动补齐插件onmicppcompete的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819588

相关文章

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、