6

当我使用相对较大的 TAGS 文件运行anything-c-etags-select命令时,我总是会收到错误消息,例如Emacs 上的迷你缓冲区内的正则表达式匹配器中的堆栈溢出。*Messages*缓冲区中,出现如下日志消息:

File TAGS is large (9MB), really open? (y or n) 
Loading tag file...70%
and: Stack overflow in regexp matcher

似乎 Emacs 没有足够的堆栈大小来读取整个标签数据。有没有办法增加 Emacs 的堆栈大小?

我用 2 个版本的 Emacs 试过这个:

  • Emacs Mac OS X 24.1(通用二进制)
  • 适用于 Mac OS X 23.4 的 Emacs(通用二进制)

但是,他们都显示了相同的错误消息。

提前致谢!

4

2 回答 2

1

可能为您提供简单的解决方法:

更好的是:[\0-\377[:nonascii:]]* 避免了“正则表达式匹配器中的堆栈溢出”对于大文本,例如 > 34k。

...和/或...

我的标签表位于不同的位置,具体取决于我正在使用的代码。我发现让环境变量 $DEVELOP 指向我正在工作的目录很容易,该目录具有 Emacs 的 TAGS 和 vi 的标签。

于 2012-06-29T21:35:48.557 回答
0

我确认如果字符串匹配函数的第二个参数太大,该函数无法处理该参数。我为函数添加了一个限制,如下所示:

$ git diff
diff --git a/lisp/anything/anything-config.el b/lisp/anything/anything-config.el
index 23f00e5..cee5e13 100644
--- a/lisp/anything/anything-config.el
+++ b/lisp/anything/anything-config.el
@@ -7001,7 +7001,7 @@ If not found in CURRENT-DIR search in upper directory."
                        (anything-aif (string-match "\177" i)
                            (substring i 0 it)
                          i))
-           do (cond ((and elm (string-match "^\\(.+\\),[0-9]+" elm))
+           do (cond ((and elm (< (length elm) 2000) (string-match "^\\(.+\\),[0-9]+" elm))
                      (setq fname (match-string 1 elm)))
                     (elm (setq cand (concat fname ": " elm)))
                     (t (setq cand nil)))

我认为这是一种快速而肮脏的 hack,但它现在运行良好。

于 2012-06-30T07:27:38.190 回答