首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VIM配置成C/C++ IDE的心得——ctags不能查找系统文件

2013-10-28 
VIM配置成C/C++ IDE的经验——ctags不能查找系统文件经过几天的试验与google,终于配置将VIM配置成一个C/C的I

VIM配置成C/C++ IDE的经验——ctags不能查找系统文件

经过几天的试验与google,终于配置将VIM配置成一个C/C++的IDE,用到的插件为Ctags,Winmanager,NERDTree,OmniCppComplete,以及MiniBufExplorer,

这些插件都可以再vim的官方网站的中下载到,具体是实现是参照如下几篇文章:

1)http://blog.csdn.net/klarclm/article/details/7932521

2)http://blog.csdn.net/klarclm/article/details/7932558

3)http://blog.csdn.net/wooin/article/details/1858917

有几点重要内容,提醒大家一下:

1)VIM使用apt-get install vim,安装好了以后,其中会存在多个vimrc配置文件。比如我知道的有/usr/share/vim/vimrc  (这是个可见文件),这个文件会影响整个系统的VIM设置,

我们设置的时候别动它。对于我们自己的一个user,我们自己可以再~/ 目录下面建立一个vimrc文件来用于配置VIM,我们可以

$gedit  ~/.vimrc  

这样去新建一个vimrc配置文件。这个新建的文件只会影响本用户的VIM,而且~/.vimrc文件中的配置会覆盖/etc/vimrc 或者/usr/share/vim/vimrc 中的配置。因此这个配置是本用

户的专属配置。

2)我们需要在~/ 目录下新建一个文件夹(隐藏的),来保存本用户使用的VIM插件。同时我们可以在进入了VIM以后使用":set rtp"命令来查看已经装过的插件。

新建一个文件夹来保存                         $mkdir ~/.vim

 

出现的问题:

在我使用ctags时候,ctags为系统提供的头文件生成tags总是不对。

例如对于/usr/include/sys/socket.h,里面有很多函数在ctags处理的时候没有添加到tags里面去。最后发现是__TRHOW的问题

ctags为系统提供的头文件生成的索引总是不太对。比如对于/usr/include/sys/socket.h,里面有很多函数在ctags处理的时候没有能加到索引里去。最后发现是__TRHOW的问

题。以listen函数为例,在socket.h中,它的原型是:

extern int listen (int __fd, int __n) __THROW;

socket.h间接包含了sys/cdefs.h,__THROW就是在这个头文件中被定义的。其定义如下:

# if !defined __cplusplus && __GNUC_PREREQ (3, 3)       
# define __THROW       __attribute__ ((__nothrow__))   
# define __NTH(fct)    __attribute__ ((__nothrow__)) fct
# else                                                  
# if defined __cplusplus && __GNUC_PREREQ (2,8)        
#   define __THROW      throw ()                        
#   define __NTH(fct)   fct throw ()                    
# else                                                 
#   define __THROW                                      
#   define __NTH(fct)   fct                             
# endif                                                
# endif                                                 

正是这个复杂的宏定义干扰了ctags,对于所有像listen这样含有__THROW的原型,ctags一律都不能正确解析。

为了不让__THROW干扰ctags,需要在运行ctags时使用-I选项。一般使用下面的命令生成系统头文件tags

 

ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p -R -f ~/.vim/systags /usr/include /usr/local/include

 

其关键是-I __THROW部分和--c-kinds=+p部分。(这里是l,不是大写的i)

设置-I后,ctags会在处理文件时,就会忽略-I后面写出来的符号。

而--c-kinds=+p则告诉ctags需要为函数原型的声明也生成tag。

--langmap=c:+.h表示.h视为c文件而不是c++文件。

最后,设置你的~/.vimrc,加入一行:

set tags+=~/.vim/systags

就可以享受系统库函数名补齐,和   .  ->  等有用的功能了。




热点排行