Macos gtags在Emacs中非常慢

Macos gtags在Emacs中非常慢,macos,emacs,emacs24,dot-emacs,gnu-global,Macos,Emacs,Emacs24,Dot Emacs,Gnu Global,我在emacs中使用GNUGlobal,一切正常,但命令“gtags find tag”搜索太慢,无法忍受。只有这个命令非常慢,其他的像“gtags find rtag”我认为是正常的。 我删除了其他配置,如cedet,以便排除这些影响,但这个问题仍然存在。 我是否错过了全局或emacs的一些配置步骤?或者其他平台(linux)中的任何人都有这个问题 == 我的Emacs是Emacs for Mac OSX版本是24.3,GNU global是6.2.8,我的配置文件是 (add-to-list

我在emacs中使用GNUGlobal,一切正常,但命令“gtags find tag”搜索太慢,无法忍受。只有这个命令非常慢,其他的像“gtags find rtag”我认为是正常的。 我删除了其他配置,如cedet,以便排除这些影响,但这个问题仍然存在。 我是否错过了全局或emacs的一些配置步骤?或者其他平台(linux)中的任何人都有这个问题

==
我的Emacs是Emacs for Mac OSX版本是24.3,GNU global是6.2.8,我的配置文件是

(add-to-list 'load-path (expand-file-name "~/.emacs.d"))
(setq load-path (cons "/Users/xxx/.emacs.d/gtags.el" load-path))
(autoload 'gtags-mode "gtags" "" t)
(add-hook 'c-mode-hook
   (lambda ()
     (gtags-mode t)
   ))
我不使用Global(我一直想尝试它),但是看看,
gtags find标签
gtags find rtag
是非常相似的函数

我假定差异要么在完成读取阶段,要么在查找阶段,两者都调用全局

在完成读取时,“gtags”传递选项
-c
,而“grtags”传递
-cr

在查找阶段,“gtags”通过
-x
,而“grtags”通过
-xr

我首先尝试确定它在Emacs之外是否比在Emacs内部更快。以上内容可能足以让您进行测试,但您应该能够通过使用
M-x entry-debug-RET调用process RET
(随后可以使用
M-x cancel debug-on entry
)计算出所使用的确切命令,然后运行gtags函数,查看该函数调用的堆栈跟踪中出现了哪些参数

如果你不能确定堆栈跟踪的头尾,试着复制并粘贴到你的问题中

编辑:

根据评论中的信息,似乎是案例不敏感的论点,出于某种原因,它将事情拖慢到了不合理的程度

您应该能够在此处禁用该行为:


M-x
customize variable
RET
gtags ignore case
RET

n.b.最好不要将
~/.emacs.d
本身放在加载路径中——emacs在那里写入各种文件,偶尔带有
.el
扩展名,这意味着可能会无意中隐藏真实的库。您应该将elisp文件放在子目录中(例如
~/.emacs.d/lisp/gtags.el
)。而
(setq加载路径(cons)/Users/xxx/.emacs.d/gtags.el“加载路径”)
是错误的<代码>加载路径是加载时要在其中查找库的目录列表。因此,您添加了库的父目录,而不是库本身。感谢phils,我将gtags.el移动到了~/.emacs.d/lisp/,并将此目录添加到加载路径,但此问题仍然存在。让我描述一下我的问题。我的GNU global可以工作,只是这个命令“gtags find tag”搜索非常慢,它需要大约30秒才能弹出标签搜索结果。但是其他命令是可以的,只有这个命令有这个问题。phils,谢谢你的帮助。我将这些命令的跟踪区分为enable debug on entry,区别在于gtags find tag将调用gtags goto tag(“connect_slot”“nil”),但gtags find rtag将调用gtags goto tag(“connect_slot”“r”)。(“connect_slot”是我输入搜索的函数名)最后,gtag find标记将调用(gtags goto标记名“other win”),而gtag find rtga将调用(gtags goto标记名“r”)。唯一的区别是,这个参数传递给GTAGTO to TAG。Bty,这个慢的问题只发生在C++文件中,在C文件中,没有这样的问题。正如我所说的,<代码>调用过程< /C>是您感兴趣的函数,找出外部命令。在另一个注释中,全局版本是2.2.9。这可能值得一试。外部命令是相同的
调用过程(“global”nil t nil“-pr”)
,因此我认为这是gtags.el的问题,而不是global的问题。在gtags.el的
gtags goto标记中,我找到了“(“setq”状态(if(相等标志“C”)(调用进程gtags全局命令nil t nil选项”--编码路径=\“\t\”上下文标记名)(调用进程gtags全局命令nil t nil选项”--编码路径=\“\t\”标记名))(gtags pop-tramp环境)`