GNU Global 的使用
本文最后更新于 2024年11月22日 早上
☆ 1. GNU Global 简介
GNU Global 是一种源代码标记系统,可以帮助程序员在代码库中快速定位函数、变量、宏定义等。GNU Global 可以生成索引文件,用于快速跳转到定义、引用、函数调用等地方,从而提高代码阅读和编辑的效率。
GNU global 具有以下优势:
- 多语言支持:在默认情况 GNU Global 支持 C, C++, Yacc, Java, PHP4 和 assembly 语言,在安装拓展的情况下可以支持 50多种语言。
- 完整性:GNU global 可以标记更多符号的位置,如定义、引用、结构体、类,宏定义等。
- 高效性:GNU global 生成高效的 tag 数据库,节省了磁盘空间,使得查询速度更快,同时也支持增量更新索引文件,这意味着当源代码发生变化时,只需要重新生成变更的部分,而不需要重新生成整个索引文件。
- 可集成:可以在 Emacs, Vi /vim, Less viewer, Bash shell, 浏览器环境下正常使用
- 持续更新: https://www.gnu.org/software/global/whatsnew.html
更多信息请参考: https://www.gnu.org/software/global/globaldoc_toc.html 1.3 Features
☆ 2. GNU Global 的安装
下载地址: https://ftp.gnu.org/pub/gnu/global/global-6.6.9.tar.gz
https://www.gnu.org/software/global/download.html 中说明了源码编译方法:
1 |
|
Fedora/Debian 等系统可以使用仓库直接安装,下面以 Fedora Linux 为例
1 |
|
如果不安装 global-ctags
在 Fedora 下可能会报 Cannot enable custom plug-in parser for GNU GLOBAL
的错误。
gtags-cscope 由 global 安装包提供不用另外安装了。
1 |
|
macOS 下可以使用 brew 安装 global,执行 brew install global
即可。
参见 https://www.gnu.org/software/global/download.html
如果需要gtags支持 C/C++/Java 之外的语言,需要安装 pygments
。
1 |
|
☆ 3. GNU global 和 cscope, vim 集成
vim 的 cscope 支持可能需要重新编译 vim,可以通过下面的命令查询。
1 |
|
GNU global 提供了两个 vim 插件用于和 vim 结合,分别为 gtags.vim 和 gtags-cscope.vim,可以直接拷贝到 vim 的插件目录使用。
1 |
|
如果是系统仓库安装路径可能有变化,Fedora 上的 gtags.vim 路径为 /usr/share/gtags/gtags.vim
。
gtags-cscope.vim 定义了一组快捷键和以前的 cscope_maps.vim
一致
1 |
|
gtags-cscope.vim 的使用注释里有详细的说明:
1 |
|
除了不能使用 :cs find d
命令,可以使用其他所有的命令,gtags-cscope.vim 使用快捷键替代了输入命令,常用的快捷键的含义如下:
1 |
|
<C-\>g
是同时按下 Ctrl 和 \
,接着再按 g , 其他的同理。
在 .vimrc 中添加下面的配置
1 |
|
☆ 4. GUN global 的使用方法
切换到源码目录,执行下面的命令将生成 Global 所需要的索引文件。
1 |
|
上面的命令执行完毕后,会生成 GPATH、GRTAGS、GTAGS 几个索引文件。
在 vim 中执行 :GtagsCscope <ENTER>
即可加载索引文件,最后就是使用快捷键愉快地浏览源码文件了。
☆ 5. Ubuntu 下 global 安装的一些说明
首先需要安装 global sudo apt-get install global
, 安装完成后还有一些工作需要处理。
解决 python 路径问题
1 |
|
在 ubuntu 24.04 执行上面的命令会报错,新系统没有 /usr/bin/python
只有 /usr/bin/python3
安装 python-is-python3 可以解决这个报错。 sudo apt install python-is-python3
或者建立一个符号链接 sudo ln -s /usr/bin/python3 /usr/bin/python
,应该也是可行的。
安装 ctags
ctags 的情况比较复杂,理论上安装 universal-ctags
或者 exuberant-ctags
都可以。
1 |
|
选择一个 ctags 安装 :)
1 |
|