当我使用相对较大的TAGS文件运行 anything-c-etags-select 命令时,我总是在迷你缓冲区内得到错误消息,如 regexp matcher中的堆栈溢出在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:
但是,他们都显示了相同的错误信息。
提前致谢!
答案 0 :(得分:1)
可能很容易为您解决方法:
更好的是:[\ 0- \ 377 [:nonascii:]] *避免“regexp中的堆栈溢出 匹配器“用于大文本,例如,> 34K。
......和/或......
我的代码表位于不同的位置,具体取决于我的代码 与...合作。我发现很容易产生环境变量 $ DEVELOP指向我正在使用的目录,其中包含TAGS vi的电子邮件和标签。
答案 1 :(得分:0)
我确认如果 string-match 函数的第二个参数太大,则该函数无法处理该参数。我添加了对函数的限制,如下所示:
$ 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)))
我认为这是一种快速而又肮脏的黑客行为,但现在它的工作正常。