如何在 ubuntu 的 C/C++ 包含目录中生成带有旺盛的 ctags 的标签文件以用于 gvim?

How can I generate tags file with exuberant ctags in ubuntu's C/C++ include directories for using with gvim?

本文关键字:ctags 标签 gvim 用于 文件 ubuntu C++ 包含目      更新时间:2023-10-16

我在Windows 7中使用GVim 7.4和TDM-GCC 64。我知道这个编译器的include目录,并将这些路径适当地添加到gvim的标签搜索路径中。在Windows中一切都很好。

但我是ubuntu的新手,我目前安装了ubuntu 13.10(Saucy),但是对编译器的include目录有点困惑。

我发现其中一些目录是:

/usr/include
/usr/src
/usr/local/include
/usr/include
/usr/lib/gcc/i686-linux-gnu/4.8
/usr/lib/gcc/x86_64-linux-gnu/4.8/include

最后,我创建了一个shell脚本,如下所示:

#!/bin/sh
cd /usr/include
sudo ctags -R --c-kinds=+pxfvtcdeglmnsu --c++-kinds=+pxfvtcdeglmnsu --languages=C,C++ --langmap=C:.c.h --langmap=C++:.C.h.c.cpp.hpp.c++.cc.cp.cxx.h++.hh.hp.hxx --fields=+iaSm --extra=+qf -f tags *
cd /usr/src
sudo ctags -R --c-kinds=+pxfvtcdeglmnsu --c++-kinds=+pxfvtcdeglmnsu --languages=C,C++ --langmap=C:.c.h --langmap=C++:.C.h.c.cpp.hpp.c++.cc.cp.cxx.h++.hh.hp.hxx --fields=+iaSm --extra=+qf -f tags *
cd /usr/local/include
sudo ctags -R --c-kinds=+pxfvtcdeglmnsu --c++-kinds=+pxfvtcdeglmnsu --languages=C,C++ --langmap=C:.c.h --langmap=C++:.C.h.c.cpp.hpp.c++.cc.cp.cxx.h++.hh.hp.hxx --fields=+iaSm --extra=+qf -f tags *
cd /usr/include
sudo ctags -R --c-kinds=+pxfvtcdeglmnsu --c++-kinds=+pxfvtcdeglmnsu --languages=C,C++ --langmap=C:.c.h --langmap=C++:.C.h.c.cpp.hpp.c++.cc.cp.cxx.h++.hh.hp.hxx --fields=+iaSm --extra=+qf -f tags *
cd /usr/lib/gcc/i686-linux-gnu/4.8
sudo ctags -R --c-kinds=+pxfvtcdeglmnsu --c++-kinds=+pxfvtcdeglmnsu --languages=C,C++ --langmap=C:.c.h --langmap=C++:.C.h.c.cpp.hpp.c++.cc.cp.cxx.h++.hh.hp.hxx --fields=+iaSm --extra=+qf -f tags *
cd /usr/lib/gcc/x86_64-linux-gnu/4.8/include
sudo ctags -R --c-kinds=+pxfvtcdeglmnsu --c++-kinds=+pxfvtcdeglmnsu --languages=C,C++ --langmap=C:.c.h --langmap=C++:.C.h.c.cpp.hpp.c++.cc.cp.cxx.h++.hh.hp.hxx --fields=+iaSm --extra=+qf -f tags *

但是这个脚本正在生成一个巨大的标签文件,因此,vim在搜索函数、变量、结构、,原型等。当我按下"<C-X><C-O>"或Tab(我将omni completion配置为Tab)时,vim冻结了一段时间,然后建议我正在寻找的内容。

最后我决定放弃递归(-R)选项,但我的问题是:

1) ubuntu中的实际包含目录是什么?

2) 我应该在哪里使用递归,在哪里不应该?

3) 通常不需要许多目录,例如"/usr/src/"或"/usr/src/nvidia-331.38"它主要包含Linux头文件和NVIDIA驱动程序功能。这些类型的目录是什么,这样我就可以在.virc中列出它作为最后一个选项?

我正在寻找一种解决方案,可以在不降低vim速度的情况下找到所有内容(函数、变量、结构)。

提前谢谢。

我建议/usr/include和/usr/local/include递归地作为头文件的最基本路径。

在大多数类Unix系统(包括Linux和FreeBSD发行版)上,/usr/include是查找C和C++库头文件的最基本位置。

系统管理员通常(但并非总是)会在/usr/local中安装额外的软件,这通常(但并不总是)意味着添加的库将在/usr/local/lib中,并且它们的C/C++头文件将在/usr/local/include中。

在一些类似Unix的系统上,可选软件安装在/opt而不是/usr/local中。

通常在类似Unix的开源系统上,/usr/src将包含操作系统的源代码和标头,包括内核和"用户区"(即用户可能从命令行使用的命令)。通常,除非您开发的应用程序应该与操作系统紧密集成,或者实际上是操作系统的一部分,否则您不需要/usr/src路径中的头文件(但不在/usr/include中)。