对原文作了部分修改及增长,原文地址http://timothyqiu.com/archives/using-omnicomplete-for-c-cplusplus-in-vim/ php
OmniComplete 并非插件的名字,而是 Vim 众多补全方式中的一种(全能补全)。说白了 OmniComplete 其实就是根据光标前的内容猜想光标后的内容,具体怎么猜取决于所采用的脚本。 html
而 OmniCppComplete 就是专为 C/C++ 编写的 OmniComplete 一个补全脚本。 python
那么常常和 OmniCppComplete 一块儿出没的 Ctags 又是什么呢?Ctags 全名 Exuberant Ctags,是一个独立的程序(也就是说,其实和 Vim 一点关系都没有)。它能够为各类语言的源代码生成语言元素(language object)索引文件。对于 C/C++ 来讲,就是把源代码中的各类宏、函数、类、类成员等等元素和它们的相关信息生成索引文件,供其它程序使用。 c++
OmniCppComplete 脚本就是根据 Ctags 生成的索引文件进行补全的。 好了,背景知识就是这样,安装步骤以下: shell
通常ctags 都是默认安装过的,fedora下能够用yum list ctags,查看是否安装 vim
以生成 C++ 标准库索引文件为例: curl
使用命令行进入 D:/ctags/cpp_src 后执行: 函数
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f cpp .
建议将上一步生成的 D:/ctags/cpp_src/cpp 文件放到一个专门放置索引文件的目录以便后面的统一设置,例如放到 D:/ctags/tags 网站
其它库的索引文件也能够依法炮制,只需切换到该库的 include 文件夹,执行: ui
ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f <文件名> .
添加openGL
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ /usr/include/GL
修改为对应tags
mv tags gl
fedora17 的$HOME下没有.vim文件夹,建立一个就能够了,vim会自动加载的。
可是也能够设置成全局的,对全部用户有效,就是吧~/.vim 替换成 $VIM/vimfiles
$VIM/vimfiles:功能同上,不过是对全部用户均有效的。
VIM 插件通常安装在 5 个地方,存放插件的路径都列在“runtimepath”选项中,咱们能够使用 set 命令查看它:
:set runtimepath?
显示结果以下:
runtimepath=~/.vim,/usr/local/share/vim/vimfiles,/usr/local/share/vim/vim63,/u
sr/local/share/vim/vimfiles/after,~/.vim/after Unix 下的 $HOME/.vim 或 Windows 下的 %HOME% $VIM/vimfiles:功能同上,不过是对全部用户均有效的。 $VIMRUNTIME:随 VIM 一同发行的插件与脚本。不要在这里存放你本身下载或安装的文件,升级 VIM 的时候,这里的文件极可能被直接覆盖掉,不会给出任何提示信息。 Unix 下的 $HOME/.vim/after 或 Windows 下的 %HOME% $VIM/vimfiles/after:对全部用户均有效的一些全局设置修正脚本。 以上路径都是使用“VIM 语言”给出的,通常状况下,$VIMRUNTIME 都不会被定义为系统环境变量,$VIM 在少数状况下会在 VIM 以外被定义。若是你想知道这些路径都是什么,能够在 VIM 中使用“:echo $VIMRUNTIME”或“:echo $VIM”。 以上提到的 5 个目录的子目录结构都是相同的。若是你但愿在其它目录里安装插件的话,建议使用 $VIMRUNTIME 的目录结构做为模版,将必要的目录结构建立完整,像这样:
+ <Directory>
+ colors + compiler + doc + etc + ftdetect + ftplugin + indent + keymap + plugin + syntax |
在 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 分别对应背景色和前景色。
ps:tab键 设置为4个空格,设置tab宽度
为了vim更好的支持python写代码,修改tab默认4个空格有两种设置方法: 1. vim /etc/vimrc
2. vim /etc/vimrc
推荐使用第二种,按tab键时产生的是4个空格,这种方式具备最好的兼容性。 from: http://my.oschina.net/renwofei423/blog/17338 |