如何在 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?
我在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中)。
- C 和 C++ 中开关语句的案例标签的常量值,但显示不同的行为
- 如何正确指定 goto 语句的标签?
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 通过水平滚动条更改标签
- 从 QFontDatabase 设置 QFont 将所有标签设置为等宽字体?Qt C++
- 在C++中存储要输入的标签列表
- 如何在等效列表中查找最小的连接标签
- 标签检测鼠标单击 c++
- 无法将行编辑中的文本打印到 Qt C++ 中的标签
- 如何根据C++中的标签运行特定函数?
- C++ Expat 仅打印元素的第一个字母和标签中的数据
- 默认标签显然在 switch 语句中不起作用
- 在 gcc/clang (C++) 中获取函数范围之外的标签地址
- 在"printf"中使用标签"h"或"hh"是否涉及未定义的
- GTK 3 C++按钮中带有标签的图标
- 如何使QLineSeries/QXYSeries仅显示一个点标签
- SFINAE和标签调度之间的差异
- 如何在主窗口标签的对话框中显示QLineEdit的输入
- 如何在 ubuntu 的 C/C++ 包含目录中生成带有旺盛的 ctags 的标签文件以用于 gvim?
- 如何为 Ctags 无法处理的 MSVC 文件夹的所有头文件生成C++标签文件?