【问题标题】:How can I change the Stack Size available for Emacs?如何更改 Emacs 可用的堆栈大小?
【发布时间】:2012-06-29 21:32:43
【问题描述】:

当我使用相对较大的 TAGS 文件运行 anything-c-etags-select 命令时,我总是在迷你缓冲区内收到类似 Stack overflow in 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 试过这个:

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

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

提前致谢!

【问题讨论】:

  • 您可能想看看用Helm 替换Anything 是否可以解决问题,因为后者正在积极开发中。
  • 谢谢!我试过Helm,但仍然存在同样的问题。
  • 在这种情况下,您可以向他们提交错误报告;也许他们可以在下一个版本中修复它。
  • 只是为了指出一点,这似乎是正则表达式中的一个错误;堆栈应该足够大,可以正常使用,在大多数情况下增加堆栈可能无济于事。

标签: emacs elisp


【解决方案1】:

对您来说可能很简单的解决方法:

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

...和/或...

我的标签表在不同的地方,这取决于我的代码 一起工作。我发现有一个环境变量很容易 $DEVELOP 指向我正在工作的目录,其中有 TAGS vi 的 Emacs 和标签。

【讨论】:

  • 谢谢!这 2 个链接很有帮助!
【解决方案2】:

我确认如果 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)))

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

【讨论】:

  • 我为 helm 添加了一个 issue。请切换到它并提交 PR。
猜你喜欢
  • 2018-09-13
  • 2011-02-03
  • 2015-08-17
  • 1970-01-01
  • 2016-04-05
  • 2011-03-22
  • 2016-05-27
  • 2017-11-06
  • 2010-11-05
相关资源
最近更新 更多