OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

Vim、Emacs配置和使用
回复
freshguy
帖子: 12
注册时间: 2010-08-25 20:36

OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#1

帖子 freshguy » 2010-08-25 21:28

:em11 大家好!我是vim新手,现在要使用vim进行一个c++工程开发,说是“工欲善其事,必先利其器”,但是在利其器的过程中遇到了一个困扰了我很长时间的问题,找了很多的网页也没解决问题。为了能让大家帮我发现问题,我尽量将整个过程描述的更详尽,写的比较长,麻烦帮我看看,先行谢过了!


我的是vim72版本
先安装了ctags,并在vimrc中设置:map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> ——在按下Ctrl +F12就可以自动在当前的目录下生成tags,并且set tags也是在当前的目录下,产生tags确实没问题。

我的vim72的路径是: /usr/share/vim/vim72,其中配置文件vimrc在 /usr/share/vim文件夹中……

我的OmniCppComplete安装如下:
将omnicppcomplete-0.41.zip解压出来,里面有after、autoload、doc三个文件。然后将after、autoload两个文件直接拷贝到vim的根目录/usr/share/vim/vim72里面,再将doc里面的omnicppcomplete.txt拷贝到/usr/share/vim/vim72下的doc文件夹(这里还保存着其他插件的.txt帮助文档)中。

参考http://blog.chinaunix.net/u2/68861/showart_2054072.html 及其他的很多网页,我再在vimrc中写下下面的配置:
set nocp "non vi compatible mode
filetype plugin on "enable plugins

set completeopt=longest,menu

let OmniCpp_DisplayMode = 1 "使用“MyClass::”显示类的所有方法和属性,这样比较方便
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype (i.e. parameters) in popup window

然后在一个含有类的工程中使用。在”INSERT“模式下,在一个对象后面输入".",先按下ctrl-x ,会在vim下面的状态栏中显示: -- ^X++ mode (/^E/^Y/^L/^N/^K/^T/^I/^]/^F/^D^V/^P/^U/^O/s/n/p)
再按下 Ctrl-o 显示: unknow function ccomplete#Complete
--Omni complete(^O^N^P) Patterm not found.
但是按下ctrl-p 和 ctrl-N 却是可以弹出tag中的内容的,但是是tag中的所有的内容,包括其他类的成员甚至一些宏都有,很繁杂。但是网上大家的好像都只是弹出本类自己的成员,就和VX中的显示一样。


我不知道到底是我的OmniCppComplete安装不正确还是配置文件写的不对,或者是其他的什么原因,导致OmniCppComplete无法在vim中正常使用??

麻烦大牛指点,或者呢给你否分享一下关于OmniCppComplete在vimrc中的配置文件……
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#2

帖子 风间星魂 » 2010-08-26 14:56

autocmd FileType cpp set omnifunc=cppcomplete#Complete
加上这句看看
freshguy
帖子: 12
注册时间: 2010-08-25 20:36

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#3

帖子 freshguy » 2010-08-26 19:31

风间星魂 写了:autocmd FileType cpp set omnifunc=cppcomplete#Complete
加上这句看看

还是不行 和之前报一样的状态信息……
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#4

帖子 风间星魂 » 2010-08-27 10:17

怪事,我是放在家目录的。

而且C-x C-o可以弹出成员补全,包括STL的。不可能存在问题~C-n C-p在linux下是直接搜索了头文件里的数据,你确定tags文件里面是全的?
freshguy
帖子: 12
注册时间: 2010-08-25 20:36

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#5

帖子 freshguy » 2010-08-27 14:31

风间星魂 写了:怪事,我是放在家目录的。

而且C-x C-o可以弹出成员补全,包括STL的。不可能存在问题~C-n C-p在linux下是直接搜索了头文件里的数据,你确定tags文件里面是全的?
谢谢你的答复。确实不行……

我的vim(vim72版本)是sudo apt-get install方式安装的,安装目录是: /usr/share/vim/vim72 ( 其中默认包括colors、complier、indent、keymap、lang、plugin、ftplugin等目录及debian.vim、evim.vim、menu.vim等一些*.vim文件)
配置文件vimrc在目录 /etc/vim下

安装OmniCppComplete:将omnicppcomplete-0.41.zip解压,然后将解压后的after和autoload文件夹拷到/usr/share/vim/vim72下。将解压后doc文件夹中的omnicppcomplete.txt文件夹复制到/usr/share/vim/vim72/doc下。

tags应该是没问题的,我事先在stl源文件夹内使用ctags -R --c++-kinds=+p --fields=+iaS --extra=+q 生成了一个tags,改名为stl_tags,并将stl_tags放在 /usr/share/vim/vim72内,然后在vimrc中添加 set tags+=/usr/share/vim/vim72/stl_tags一句,表明将会在这里搜索stl的tags;工程的tags设置为:set tags+=./tags,表明omnicppcomplete会在当前工程的目录下搜索工程的tags,也就是说要搜索两部分的tags(c++工程和stl的)。确实在按下c-p、c-n会出现工程的tags和stl的tags一大堆的tags,还包括宏什么的、乱七八糟的。但是我的omnicppcomplete始终还是上面的错误状态,不能像大家说的按下功能键c-o、c-x就只会只出现该类的成员信息tag。


能详细说一下你的安装方法和配置吗? OmniCppComplete解压出来三个文件感到眼晕,不像其他很多的插件只是一个*.vim文件,只需将该文件放在/usr/share/vim/vim72/plugin下就可以直接工作了…… 谢谢 这个困扰我好长时间了
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#6

帖子 风间星魂 » 2010-08-28 11:50

freshguy 写了:
风间星魂 写了:怪事,我是放在家目录的。

而且C-x C-o可以弹出成员补全,包括STL的。不可能存在问题~C-n C-p在linux下是直接搜索了头文件里的数据,你确定tags文件里面是全的?
谢谢你的答复。确实不行……

我的vim(vim72版本)是sudo apt-get install方式安装的,安装目录是: /usr/share/vim/vim72 ( 其中默认包括colors、complier、indent、keymap、lang、plugin、ftplugin等目录及debian.vim、evim.vim、menu.vim等一些*.vim文件)
配置文件vimrc在目录 /etc/vim下

安装OmniCppComplete:将omnicppcomplete-0.41.zip解压,然后将解压后的after和autoload文件夹拷到/usr/share/vim/vim72下。将解压后doc文件夹中的omnicppcomplete.txt文件夹复制到/usr/share/vim/vim72/doc下。

tags应该是没问题的,我事先在stl源文件夹内使用ctags -R --c++-kinds=+p --fields=+iaS --extra=+q 生成了一个tags,改名为stl_tags,并将stl_tags放在 /usr/share/vim/vim72内,然后在vimrc中添加 set tags+=/usr/share/vim/vim72/stl_tags一句,表明将会在这里搜索stl的tags;工程的tags设置为:set tags+=./tags,表明omnicppcomplete会在当前工程的目录下搜索工程的tags,也就是说要搜索两部分的tags(c++工程和stl的)。确实在按下c-p、c-n会出现工程的tags和stl的tags一大堆的tags,还包括宏什么的、乱七八糟的。但是我的omnicppcomplete始终还是上面的错误状态,不能像大家说的按下功能键c-o、c-x就只会只出现该类的成员信息tag。


能详细说一下你的安装方法和配置吗? OmniCppComplete解压出来三个文件感到眼晕,不像其他很多的插件只是一个*.vim文件,只需将该文件放在/usr/share/vim/vim72/plugin下就可以直接工作了…… 谢谢 这个困扰我好长时间了
头文件path设置呢?确定检查头文件命令能正确检测头文件?比如使用C-] tags能工作么?
freshguy
帖子: 12
注册时间: 2010-08-25 20:36

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#7

帖子 freshguy » 2010-08-28 18:17

风间星魂 写了:
freshguy 写了:
风间星魂 写了:怪事,我是放在家目录的。

而且C-x C-o可以弹出成员补全,包括STL的。不可能存在问题~C-n C-p在linux下是直接搜索了头文件里的数据,你确定tags文件里面是全的?
谢谢你的答复。确实不行……

我的vim(vim72版本)是sudo apt-get install方式安装的,安装目录是: /usr/share/vim/vim72 ( 其中默认包括colors、complier、indent、keymap、lang、plugin、ftplugin等目录及debian.vim、evim.vim、menu.vim等一些*.vim文件)
配置文件vimrc在目录 /etc/vim下

安装OmniCppComplete:将omnicppcomplete-0.41.zip解压,然后将解压后的after和autoload文件夹拷到/usr/share/vim/vim72下。将解压后doc文件夹中的omnicppcomplete.txt文件夹复制到/usr/share/vim/vim72/doc下。

tags应该是没问题的,我事先在stl源文件夹内使用ctags -R --c++-kinds=+p --fields=+iaS --extra=+q 生成了一个tags,改名为stl_tags,并将stl_tags放在 /usr/share/vim/vim72内,然后在vimrc中添加 set tags+=/usr/share/vim/vim72/stl_tags一句,表明将会在这里搜索stl的tags;工程的tags设置为:set tags+=./tags,表明omnicppcomplete会在当前工程的目录下搜索工程的tags,也就是说要搜索两部分的tags(c++工程和stl的)。确实在按下c-p、c-n会出现工程的tags和stl的tags一大堆的tags,还包括宏什么的、乱七八糟的。但是我的omnicppcomplete始终还是上面的错误状态,不能像大家说的按下功能键c-o、c-x就只会只出现该类的成员信息tag。


能详细说一下你的安装方法和配置吗? OmniCppComplete解压出来三个文件感到眼晕,不像其他很多的插件只是一个*.vim文件,只需将该文件放在/usr/share/vim/vim72/plugin下就可以直接工作了…… 谢谢 这个困扰我好长时间了
头文件path设置呢?确定检查头文件命令能正确检测头文件?比如使用C-] tags能工作么?

嗯,设置了一下path:
set path+=./
set path+=/usr/share/vim/

也是报之前的错误,如下:
先按下ctrl-x ,会在vim下面的状态栏中显示: -- ^X++ mode (/^E/^Y/^L/^N/^K/^T/^I/^]/^F/^D^V/^P/^U/^O/s/n/p)
再按下 Ctrl-o 显示: unknow function ccomplete#Complete
--Omni complete(^O^N^P) Patterm not found.
另外你说的“C-] tags”怎样运行?
我觉得这是OmniCppComplete的安装配置问题。昨天试着将OmniCppComplete解压出的所有的*.vim文件都放在plugin文件夹下,启动vim就会在终端报很多OmniCppComplete里面的某些函数找不到的错,所以我觉得是安装配置问题,你是怎样安装的配置的?多谢了……
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#8

帖子 风间星魂 » 2010-08-28 18:22

就在函数上直接按C+]
如果tags正常的话会直接跳到函数声明位置上。

OmniCppComplete直接解压到你的.vim/vimfile根目标下就行了,放到plugin肯定会出错。

1) Unzip the plugin to ~/.vim (unix) or %HOMEPATH%\vimfiles (windows)

path是头文件path,unix自动包含进头文件目录

我的配置很简单,设置好path和tags路径。
打开文件检测 然后加个句autocmd FileType cpp set omnifunc=cppcomplete#Complete
就没事了。还没你设置的那么复杂。
freshguy
帖子: 12
注册时间: 2010-08-25 20:36

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#9

帖子 freshguy » 2010-08-28 21:09

风间星魂 写了:就在函数上直接按C+]
如果tags正常的话会直接跳到函数声明位置上。

OmniCppComplete直接解压到你的.vim/vimfile根目标下就行了,放到plugin肯定会出错。

1) Unzip the plugin to ~/.vim (unix) or %HOMEPATH%\vimfiles (windows)

path是头文件path,unix自动包含进头文件目录

我的配置很简单,设置好path和tags路径。
打开文件检测 然后加个句autocmd FileType cpp set omnifunc=cppcomplete#Complete
就没事了。还没你设置的那么复杂。
C-] 会自动跳到函数的声明处,tags没问题。

我现在家目录我的用户下 ~/.vim直接解压OmniCppComplete(删除了以前的安装)
启动vim后,命令模式下输入:script查看,确实是起了以下5个OmniCppComplete的中的几个插件:
c.vim、cpp.vim、complete.vim、setting.vim、maycomplete.vim
但还是原来的错误状态,你用“:script”看看你都起了那几个OmniCppComplete的文件?

我真的要崩溃掉了,我甚至在另一台机器上全新安装配置,也是不行阿!天啊,救救我……
freshguy
帖子: 12
注册时间: 2010-08-25 20:36

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#10

帖子 freshguy » 2010-08-29 13:55

freshguy 写了:
风间星魂 写了:就在函数上直接按C+]
如果tags正常的话会直接跳到函数声明位置上。

OmniCppComplete直接解压到你的.vim/vimfile根目标下就行了,放到plugin肯定会出错。

1) Unzip the plugin to ~/.vim (unix) or %HOMEPATH%\vimfiles (windows)

path是头文件path,unix自动包含进头文件目录

我的配置很简单,设置好path和tags路径。
打开文件检测 然后加个句autocmd FileType cpp set omnifunc=cppcomplete#Complete
就没事了。还没你设置的那么复杂。
C-] 会自动跳到函数的声明处,tags没问题。

我现在家目录我的用户下 ~/.vim直接解压OmniCppComplete(删除了以前的安装)
启动vim后,命令模式下输入:script查看,确实是起了以下5个OmniCppComplete的中的几个插件:
c.vim、cpp.vim、complete.vim、setting.vim、maycomplete.vim
但还是原来的错误状态,你用“:script”看看你都起了那几个OmniCppComplete的文件?

我真的要崩溃掉了,我甚至在另一台机器上全新安装配置,也是不行阿!天啊,救救我……

终于解决了:
原来我在执行 “Unzip the plugin to ~/.vim (unix) or %HOMEPATH%\vimfiles (windows)” 时前面加了sudo,这样造成的结果就是解压到 $HOME/.vim 下的3个文件夹after、autoload、doc都是不可写的(no write:文件夹的旁边加了一个小锁的图标),从而在执行:helptags $HOME/.vim/doc时也会报错:“E152: Cannot open ./tags for writing”,然后我将 $HOME/.vim 下的3个文件夹after、autoload、doc删掉,重新使用unzip(不能加sudo)在$HOME/.vim 解压omnicppcomplete-0.41.zip,然后重启vim,令人惊喜的事情终于发生了!!!真是来之不易啊!!!

再次谢谢你的热心帮助……
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#11

帖子 风间星魂 » 2010-08-30 11:58

freshguy 写了:
freshguy 写了:
风间星魂 写了:就在函数上直接按C+]
如果tags正常的话会直接跳到函数声明位置上。

OmniCppComplete直接解压到你的.vim/vimfile根目标下就行了,放到plugin肯定会出错。

1) Unzip the plugin to ~/.vim (unix) or %HOMEPATH%\vimfiles (windows)

path是头文件path,unix自动包含进头文件目录

我的配置很简单,设置好path和tags路径。
打开文件检测 然后加个句autocmd FileType cpp set omnifunc=cppcomplete#Complete
就没事了。还没你设置的那么复杂。
C-] 会自动跳到函数的声明处,tags没问题。

我现在家目录我的用户下 ~/.vim直接解压OmniCppComplete(删除了以前的安装)
启动vim后,命令模式下输入:script查看,确实是起了以下5个OmniCppComplete的中的几个插件:
c.vim、cpp.vim、complete.vim、setting.vim、maycomplete.vim
但还是原来的错误状态,你用“:script”看看你都起了那几个OmniCppComplete的文件?

我真的要崩溃掉了,我甚至在另一台机器上全新安装配置,也是不行阿!天啊,救救我……

终于解决了:
原来我在执行 “Unzip the plugin to ~/.vim (unix) or %HOMEPATH%\vimfiles (windows)” 时前面加了sudo,这样造成的结果就是解压到 $HOME/.vim 下的3个文件夹after、autoload、doc都是不可写的(no write:文件夹的旁边加了一个小锁的图标),从而在执行:helptags $HOME/.vim/doc时也会报错:“E152: Cannot open ./tags for writing”,然后我将 $HOME/.vim 下的3个文件夹after、autoload、doc删掉,重新使用unzip(不能加sudo)在$HOME/.vim 解压omnicppcomplete-0.41.zip,然后重启vim,令人惊喜的事情终于发生了!!!真是来之不易啊!!!

再次谢谢你的热心帮助……
我也没能帮到您什么忙,您通过自我判断和分析找出了问题。
linbc
帖子: 10
注册时间: 2008-11-08 9:30

Re: OmniCppComplete插件为什么一直不能用,没有c-x,c-y命令模式

#12

帖子 linbc » 2012-04-13 15:27

真让人感动啊
回复