ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

Vim、Emacs配置和使用
回复
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#1

帖子 fanhe » 2010-12-15 0:43

例如 getpid getppid 这些,我暂时发现扫描unistd.h会这样,不知道扫描其他头文件会不会出现类似问题

还是我没加某些选项?
反正我现在没法补全getpid了,换过几个选项,查看扫描过的tags,还没没发现getpid符号
到底啥问题啊,google没找到这类问题,郁闷死了
你们有这种情况吗
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#2

帖子 lilydjwg » 2010-12-15 10:38

有。是 ctags 的原因。不知道怎么解决。
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#3

帖子 风间星魂 » 2010-12-16 1:55

看过libc头文件就知道,有些比如malloc之类的函数是扫描不出来的……声明比一般的函数复杂。
cedet ctags之类的都扫描不全,扫描时可能要结合正则补充了。
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#4

帖子 风间星魂 » 2010-12-16 3:05

LinuxSir我没注册,在这里回帖,以免楼主破坏了Cscope的名声,Cscope比*tags强大太多了。

宏定义和结构那是肯定有的!

见下图!
附件
Screenshot-fengjian    [All-].png
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#5

帖子 fanhe » 2010-12-16 15:48

风间星魂 写了:LinuxSir我没注册,在这里回帖,以免楼主破坏了Cscope的名声,Cscope比*tags强大太多了。

宏定义和结构那是肯定有的!

见下图!
我的意思是,怎样可以使vim在宏上面按ctrl-]直接跳到宏的定义
我只知道现在是靠ctags来跳的,但是函数的定义可以用cscope来跳
我想不用ctags,仅仅用cscope来实现所有源代码的跳转
所以看代码的时候我想仅仅用cscope,不用那半残的ctags

所以怎么使vim用cscope来实现ctrl-]跳到宏啊,结构啊之类的定义处呢?

另外,怎么用正则来补全ctags的扫描来的,提供个参数线索也好,man页太长不适合看

btw,codelite的tags貌似是用sql来查询的,而且扫描的时候没发现缺少符号,至少getpid之类不会少
不知道codelite用什么来生成tags的
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#6

帖子 fanhe » 2010-12-16 16:32

好像解决了,用:cstag能随便跳
看代码的时候能扔掉ctags了,现在ctags唯一的存在理由是,omni补全……
但是符号都扫描不全,怎么补全啊,郁闷啊

还有,好像我找不到etags,主页在哪里,我看看etags是不是也是扫描不全,难道已经死了?
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#7

帖子 BigSnake.NET » 2010-12-16 16:47

因为 ctags 只做模式匹配,不会展开宏
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#8

帖子 风间星魂 » 2010-12-16 17:13

etags是emacs自带的。生成的tag vim不能用,而且这玩意不如ctags。。直接让vim扫描头文件补全就行了,最多慢点。
头像
sunsol
帖子: 55
注册时间: 2009-01-04 21:55

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#9

帖子 sunsol » 2011-01-01 1:27

alias cctags='ctags --language-force=c++ --c++-kinds=+p --fields=+iaS --extra=+q -I "__nonnull __dead2 __pure2 __unused __packed __aligned __section __always_inline __wur __THROW __attribute_pure__ __attribute__ __asm G_GNUC_PURE G_GNUC_MALLOC G_GNUC_NULL_TERMINTED G_GNUC_ALLOC_SIZE G_GNUC_ALLOC_SIZE2 G_GNUC_PRINTF G_GNUC_SCANF G_GNUC_FORMAT G_GNUC_NORETURN G_GNUC_CONST G_GNUC_UNUSED G_GNUC_NO_INSTRUMENT" '
头像
dwl301
帖子: 1131
注册时间: 2007-04-14 11:17

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#10

帖子 dwl301 » 2011-01-15 10:00

对于.h中声明的函数的参数如果是两行,好像 ctags -R 生成的索引就 没有这个函数
应该是 ctags 本身的问题 ……
头像
greatgarlic
帖子: 1794
注册时间: 2007-07-11 12:31
来自: neverland
联系:

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#11

帖子 greatgarlic » 2011-08-30 9:56

来问问,有人解决了么。unistd.h中无法索引write()
To be is to do--Nietzsche
To do is to be--Kant
Do be do be do---Frank Sinatra
http://ggarlic.org
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#12

帖子 fanhe » 2011-08-30 10:28

greatgarlic 写了:来问问,有人解决了么。unistd.h中无法索引write()
unistd.h 有很多宏, 而这些宏ctags 无法感知, 于是就会出现很多的问题
参考楼上某楼添加 -I 参数来让 ctags 感知那些宏就行了

ctags 毕竟不是一个完整的 c/c++ 预处理器
头像
greatgarlic
帖子: 1794
注册时间: 2007-07-11 12:31
来自: neverland
联系:

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#13

帖子 greatgarlic » 2011-08-30 11:10

fanhe 写了:
greatgarlic 写了:来问问,有人解决了么。unistd.h中无法索引write()
unistd.h 有很多宏, 而这些宏ctags 无法感知, 于是就会出现很多的问题
参考楼上某楼添加 -I 参数来让 ctags 感知那些宏就行了

ctags 毕竟不是一个完整的 c/c++ 预处理器
-I 各种参数加上了,生成的tags文件中也能找到write()在unistd中的extern声明,但诡异的是自动补全里找不到,我很无语
To be is to do--Nietzsche
To do is to be--Kant
Do be do be do---Frank Sinatra
http://ggarlic.org
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#14

帖子 fanhe » 2011-09-08 22:34

diff
附件
screenshot2.png
screenshot1.png
zxc66258
帖子: 3
注册时间: 2012-06-10 22:52

Re: ctags 扫描 unistd.h 总是缺少getpid等等的几个符号

#15

帖子 zxc66258 » 2012-08-20 16:50

谢谢了 应该是是宏的问题
sunsol 写了:alias cctags='ctags --language-force=c++ --c++-kinds=+p --fields=+iaS --extra=+q -I "__nonnull __dead2 __pure2 __unused __packed __aligned __section __always_inline __wur __THROW __attribute_pure__ __attribute__ __asm G_GNUC_PURE G_GNUC_MALLOC G_GNUC_NULL_TERMINTED G_GNUC_ALLOC_SIZE G_GNUC_ALLOC_SIZE2 G_GNUC_PRINTF G_GNUC_SCANF G_GNUC_FORMAT G_GNUC_NORETURN G_GNUC_CONST G_GNUC_UNUSED G_GNUC_NO_INSTRUMENT" '
回复