首先OmniCppCompletion是vim的一个代码补全的工具,官网(点击打开链接)。
1.先安装ctags(ctags的安装教程点击打开链接)
2.然后参考官网
解析:从官网下载压缩文件之后,在主目录下新建一个 .vim文件也就是 ~/.vim(因为是linux系统,所以新建一个.vim文件),然后打开vim,在vim命令行输入
:helptags $HOME/.vim/doc
这个命令的功能是给vim添加 OmniCppCompletion帮助文档,在执行了上述步骤之后,如果在vim normal模式下键入
:h omnicppcomplete
就能显示出OmniCppCompletion的帮助文档,如下图所示
(这个帮助文档很有用,值得花一个或者半个小时好好看,对提高编程效率有很大用处)
现在完成了omnicppcompletion的安装了,接下来要配置它了,这个主要是参考vim tip wiki点击打开链接。(这个链接很好)
首先是安装要求
1.这里说的doc文件夹是在前面安装omnicppcompletion时新建的~/.vim/下面的。至于这个.txt文件也就是前面的那个说明文档。
2.这里在~/.vim/ 新建个tags文件夹是为了存放常用的tags的
3.下载stdc++头文件是为了生成针对c++的tags。
4.进到新建的tags文件夹,并用上述命令生成一个stdc++对应的tags文件,这个文件的名字叫做cpp。
cd ~/.vim/tags
$ ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f cpp cpp_src
5.可以通过这个种方式生成各种库的tags文件,并把这些生成的tags放到 /tags这个目录下,比如你安装了opengl,sdl ,QT就可以通过如下方式生成相应的tags文件,并放到~/.vim/tags/ 中。
$ ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f gl /usr/include/GL/ # for OpenGL
$ ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f sdl /usr/include/SDL/ # for SDL
$ ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f qt4 /usr/include/qt4/ # for QT4
6.这个是官网建议在 ~/.vimrc(如果没有这个文件,就可以自己新建一个)文件中的关于omnicppcompletion的设置
" configure tags - add additional tags here or comment out not-used ones
set tags+=~/.vim/tags/cpp
set tags+=~/.vim/tags/gl
set tags+=~/.vim/tags/sdl
set tags+=~/.vim/tags/qt4
" build tags of your own project with Ctrl-F12
map <C-F12> :!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
" OmniCppComplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
let OmniCpp_MayCompleteDot = 1 " autocomplete after .
let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->
let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" automatically open and close the popup menu / preview window
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest,preview
其中
" configure tags - add additional tags here or comment out not-used ones
set tags+=~/.vim/tags/cpp
set tags+=~/.vim/tags/gl
set tags+=~/.vim/tags/sdl
set tags+=~/.vim/tags/qt4
这几条语句,把cpp,opengl,sdl,qt4的对应的tags命令也加到omnicppcompletion补全的搜索范围里了(如果有需要到这几个库的话,如果不需要则不要把这几个库加进来)。
下面是我自己的在~/.vimrc的设置
" configure tags - add additional tags here or comment out not-used ones
7 "set nocp
8
9 set tags+=~/.vim/tags/cpp
10 set tags+=./tags
11 set tags+=~/.vim/tags/opencv
12 set tags+=~/.vim/tags/opencv2
13 "set tags+=~/.vim/tags/qt4
14 " build tags of your own project with Ctrl-F12
15 map <C-F12> :!ctags -R --sort=yes --c++-kinds=+pl --fields=+iaS --extra=+q .<CR>
16
17 " OmniCppComplete
18 let OmniCpp_NamespaceSearch = 1
19 let OmniCpp_GlobalScopeSearch = 1
20 let OmniCpp_ShowAccess = 1
21 let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
22 let OmniCpp_MayCompleteDot = 1 " autocomplete after .
23 let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->
24 let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
25 let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
26 " automatically open and close the popup menu / preview window
27 au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
28 set completeopt=menuone,menu,longest,preview
29 au BufNewFile,BufRead,BufEnter *.cpp,*.hpp set omnifunc=omni#cpp#complete#Main
这里要补充的一点就是map指令要改成如下形式
map <C-F12> :!ctags -R --sort=yes --c++-kinds=+pl --fields=+iaS --extra=+q .<CR>
和官网上的比较是在 --c++-kinds=+pl,多了个“l”因为是这个vim指令<ctrl+F12>执行的是ctags生成tags标签的功能,由于补全工具是靠tags标签文件来进行补全,所以当我们在我们的project下面进行操作的时候,需要使用 ctr+] 跳转到自己定义的变量或者函数的定义的地方,所以要生成现成project的tags,这时就要在vim界面的时候按<ctrl+F12>,然后跳转到定义处的功能才生效。
这里还多添加了一条指令
set tags+=./tags
这条指令的意义就算把前面介绍的当前公程的tags也加进搜索的范围。
下面这句的意思还不太懂得具体的含义,不过如果没有这句话的话,就有可能不实现补全
au BufNewFile,BufRead,BufEnter *.cpp,*.hpp set omnifunc=omni#cpp#complete#Main
5.ok,这里轮到设置.vimrc文件,如果在~目录下面没有这个文件就新建一个就行了,并把上面的的东西放进去。保存退出。
6.这里
set tags+=~/.vim/tags/cpp
这条命令的功能是将cpp这个tags标签文件添加到搜索的范围里,所以后面如果想要添加其他c++库进来,只要将其对应的tags的按上述设置就可以了。比如我已经生成了opencv的tags叫opencv,那我就可以这样把库添加进来
set tags+=~/.vim/tags/opencv
这样我写代码的时候就能补全opencv的函数和类了,效果如下(补充一下,opencv的安装库是在/usr/local/include 这个目录下面,如果要生成相应的tags文件也要用到这个路经)
上面的红色框是对这个opencv函数的说明。下面的红色框就是补全框。
7.使用自动补全,可以用ctrl+x+ctrl+o(也就是连续按两个快捷键,e....,在这里我卡了很久,因为第一次碰到要使用2个快捷键菜才能激活的功能,醉了),这样写代码的时候就能自动补全了
8.有啥不懂可以在vim里normal模式输入
:h omnicppcompletion
来查看帮助文档, :)