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中加入以下幾行:
- set nocp
- filetype plugin on
4)啓動Vim後使用以下命令爲Vim添加omnicppcomplete幫助信息
- :helptags ~/.vimrc/doc
對於C++代碼,需要在~/.ctags 中加入下面幾個選項(去除中文):
- --c++-kinds=+p : 爲標籤添加函數原型(prototype)信息
- --fields=+iaS : 爲標籤添加繼承信息(inheritance),訪問控制(access)信息,函數特徵(function Signature,如參數表或原型等)
- --extra=+q : 爲類成員標籤添加類標識
至此,安裝結束!
『基本功能使用方法』
在配置好Vim,並生成了ctags標籤庫前提條件下,Vim中在輸入 “xxx." 或者 "xxx->" 時會彈出如下補全提示:
- +-------------------------------------+
- |method1( f + MyNamespace::MyClass|
- |_member1 m + MyNamespace::MyClass|
- |_member2 m # MyNamespace::MyClass|
- |_member3 m - MyNamespace::MyClass|
- +-------------------------------------+
- ^ ^ ^ ^
- (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