LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2504|回复: 9

vim7的omnifunc自动补全问题

[复制链接]
发表于 2006-4-20 12:38:05 | 显示全部楼层 |阅读模式
系统:windows2k
vim版本:vim7.0e beta for win32

使用vim7自带的ccomplete.vim(在autoload里)
c:\_vimrc设置autocmd Filetype c set omnifunc=ccomplete#Complete

对c中的typedef定义的实例无法正确提示补全,说“未找到模式”,其他如结构体,变量,函数名等用C-x C-o均能正确提示。

不知道大家有没有碰到过,我觉得我这边的设置没问题,应该是这个插件或者vim7的一个bug?
 楼主| 发表于 2006-4-23 09:45:49 | 显示全部楼层
自己顶一下
哪位正在用vim7的,不管在linux下还是在win下,可以帮我看看么?
回复 支持 反对

使用道具 举报

发表于 2006-4-23 13:03:31 | 显示全部楼层
我的是7.0e
情况是这样:
自定义的结构体无法补全,系统定义的可以补全。
例如
  1. typedef struct{
  2.     int a;
  3.     float b;
  4. } test_t;
  5.     test_t a.    /* C-x C-o "pattern not found" */
  6.     timeval interval;
  7.     interval.     /* C-x C-o tv_sec, tv_usec */
复制代码
本地定义的变量,得用C-x C-N才能补全,用C-x C-o不能补全,只会给出系统定义的补全。
例如:
  1. int test
  2. t        /* C-x C-o will prompt "tag time_t" etc. except "test", but C-x C-n will */
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-23 14:55:53 | 显示全部楼层
谢谢楼上的共享经验

不过我试了一下,C-x C-n就是C-n啊
另外,结构体本身是能提示的,例如struct _data d;
但是typedef定义的就不行,可能也不只是结构体,联合和枚举用typedef定义都有这个问题。
回复 支持 反对

使用道具 举报

发表于 2006-4-24 09:16:55 | 显示全部楼层
Post by jetking
谢谢楼上的共享经验

不过我试了一下,C-x C-n就是C-n啊
另外,结构体本身是能提示的,例如struct _data d;
但是typedef定义的就不行,可能也不只是结构体,联合和枚举用typedef定义都有这个问题。

你能给出点具体的例子吗?
我的

  1. #include <stdio.h>
  2. struct test{
  3.     int a;
  4.     float b;
  5. };

  6. enum etest{
  7.     ABC,
  8.     BCD
  9. };
  10. union utest{
  11.     int ua;
  12.     long ub;
  13.     double uc;
  14. };

  15. int
  16. main()
  17. {
  18.     struct test st;
  19.     st.                /* C-x C-o prompts "pattern not found" */
  20.     enum etest et;
  21.     et =               /* C-x C-o prompts "pattern not found" */
  22.     union utest ut;
  23.     ut.                       /* C-x C-o prompts "pattern not found" */
  24. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-24 13:30:31 | 显示全部楼层
楼上的,你弄错了,omni complete是需要tags支持的,所以要先生成tags文件

C-x C-o : omni completion (需要tags支持)
C-n/C-p: keyword completion (不需要tags支持,跟vim6的一样)
C-x C-n/C-p: keyword local completion (没弄明白,好像跟C-n/C-p差不多)

另外,发现struct和union能自动补全,enum不能,还有顶楼我说的typedef定义的不能自动补全。见图(union能自动补全)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-29 14:46:58 | 显示全部楼层

解决啦

typedef name的补全需要为ctags打补丁
:he ft-c-omni

enum的补全可以修改ccomplete.vim
就是在判断union的后面在加上判断enum,具体怎么记不清了,具体写法可以参考union的实现方式。
回复 支持 反对

使用道具 举报

发表于 2006-4-29 21:49:02 | 显示全部楼层
Post by jetking
楼上的,你弄错了,omni complete是需要tags支持的,所以要先生成tags文件

你是说需要生动生存tags文件?而不会在C-o C-x的时候自动生产?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-30 12:27:30 | 显示全部楼层
不会自动产生的,要运行ctags
回复 支持 反对

使用道具 举报

发表于 2006-4-30 14:36:35 | 显示全部楼层
Post by jetking
不会自动产生的,要运行ctags

那这个比较郁闷,每次增加一个新的类型的时候,都得手动运行一下ctags
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表