emacs java代码提示_在Emacs中使用GNU Global阅读代码

作者: Jolly Wing(jiqingwu@gmail.com)

日期: 2014-05-13

声明:转载请保留作者信息

什么是GNU Global

GNU global

是一款优秀的代码阅读工具。

能对符号的定义和引用建立索引,方便代码阅读。

GNU global支持的语言很多,

它自身支持 C, C++, Yacc, Java, PHP4 和汇编语言中符号的定义和引用,

还通过 Exuberant Ctags 支持40余种语言的符号定义的索引。

能通过命令行使用,也能和Vim以及Emacs很好地集成。

安装GNU Global

对于Unix/Linux用户来说,可以直接从仓库进行安装。安装完不需要进行其它设置,很省事。

Windows用户要自己去下载。

到Gnu Global的 下载页面,

可以下载代码,自己用mingw编译,也可以下载预编译的二进制文件。

因为自己编译麻烦,我直接下载了二进制包。

下载zip压缩包后,解压,将其bin目录加入Emacs路径。

具体可以这样做:

(setenv "PATH" (concat "/path/to/global/bin;" (getenv "PATH")))

然后在Emacs的shell中试一下 gtags --help,看gtags能否正常运行。

在Emacs中使用Gtags

安装 gtags.el。

gtags安装时自带了gtags.el,找到它,把它复制到emacs的 load-path 中。

也可以用 elpa 安装 gtags.el.

准备好 gtags.el 之后,在 .emacs 或是 .emacs.d/init.el 中加入

(setq gtags-suggested-key-mapping t) 以使用建议的键绑定。

生成代码索引文件。

打开在代码目录下执行 gtags,将生成索引,生成GPATH, GTAGS, GRTAGS。

如果想看详细输出,用 gtags -v,能看到哪些文件被索引了。

在Emacs中打开一个源文件, M-x gtags-mode,如果 gtags.el 正确安装了,就会启动 gtags minor-mode。

然后就可以使用gtags的按键绑定了。我常用的按键如下:

C-c v,告诉Emacs项目的根目录,即到哪里去找GTAGS等文件。这一步不要跳过,否则你查找符号时Emacs会问你去哪里查找tags。

M-.,跳转到符号定义。

C-t,返回。

C-c g,在代码中用grep查找符号。

C-c s, 搜索某个符号。

C-c r, 看一个函数在哪些地方被引用。

使用windows遇到的问题

在Linux/Unix上使用Emacs + global时,一般不会有什么问题。

但在Windows上会遇到些问题。

第一个问题,我按 C-c v 告诉 global 去哪查找TAGS时。Emacs报错。

gtags-get-rootpath: Searching for program: permission denied, global

这说明在执行gtags.el中的 gtags-get-rootpath 时,找不到 global 程序。

如果Emacs报错: Searching for program: permission denied, xxx

说明 xxx 不在 exec-path 中。

这里要说一下 emacs 中 "PATH" 和 exec-path 的区别。

如果你想在emacs的SHELL中调用某个程序,要把它的路径加入 "PATH" 中。

如果你想在 elisp 中调用某个程序,要把它的路径加入 exec-path.

Emacs启动时,会根据系统环境变量PATH的值初始化exec-path。

如果你后面通过 setenv 向 PATH 中加入了某个路径,

exec-path并不会自动包含这个路径。

比如,刚才我们通过

(setenv "PATH" (concat "/path/to/global/bin;" (getenv "PATH")))

向PATH中加入了global的执行路径,exec-path 中并不包含该路径,所以会报错。

我们要向 exec-path 中加入该路径。

(setq exec-path (append exec-path '("/path/to/global/bin")))

把global的执行路径加入 exec-path 之后,再按 C-c v 就能正常运行了。

按 M-. 寻找一个 TAG 试试。又出错了。

global: directory 'e:/jollywing/job/Casparcg/Server/' not found.

其中e:/jollywing/job/Casparcg/Server/是刚才通过 C-c v 设置的项目根目录,怎么会找不到呢?

偶然发现,去掉路径最后的 / ,即根目录设为 e:/jollywing/job/Casparcg/Server 就可以了。

最后说明一下,在操蛋的windows下,才会遇到这些问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值