2012-06-29 59 views
5

當我運行anything-c-etags-select命令時,我總是得到如這樣的錯誤信息,正則表達式匹配器中的堆棧溢出位於Emacs的迷你緩衝區內。如何更改可用於Emacs的堆棧大小?

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

看來,Emacs中沒有足夠的堆棧大小來讀取整個標籤數據:在*Messages*緩衝,有如下顯示的日誌信息。有沒有辦法增加Emacs的堆棧大小?

我試圖與2個版本的Emacs:

  • 的Emacs對於Mac OS X 24.1(通用二進制)
  • 的Emacs對於Mac OS X 23.4(通用二進制)

但是,他們都顯示了相同的錯誤信息。

在此先感謝!

+0

你可能想看看用''Helm''(https://github.com/emacs-helm/helm#readme)替換'Anything'是否可以解決這個問題,因爲後者正在積極開發中。 – phils

+0

謝謝!我試過'Helm',但仍然存在相同的問題。 – mahata

+0

在這種情況下,您可以向他們提交錯誤報告;也許他們可以爲下一個版本修復它。 – phils

回答

1

可能容易解決方法您:

更妙的是:[\ 0〜\ 377 [:非ASCII:]] *避免了「堆棧溢出的正則表達式匹配 」對於巨大的文本,例如> 34k。

...和/或...

我的標籤表是在不同的地方,這取決於我 一起工作的代碼。我發現很容易有一個環境變量 $ DEVELOP指向我正在工作的目錄,它具有標記爲 Emacs和vi的標記。

+0

謝謝!這2個鏈接很有幫助! – mahata

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))) 

我認爲這是一種快速和骯髒的黑客,但它現在工作正常。

+0

我已經爲helm添加了一個[issue](https://github.com/emacs-helm/helm/issues/77)。請切換到它並提交PR。 –

+0

感謝您添加此問題! – mahata