2014-09-03 49 views
0

{它之前有人問:Emacs: highlight matching paren when cursor is on it, not after it但沒有一個答案是令人滿意}Emacs的:括號匹配當光標位於右括號

我使用的MIC-括號與下面的.emacs設置(雖然存在問題所有類似emacs的包,所以它似乎是某種默認emacs的行爲)

(paren-activate) 
    (setq paren-match-face 'highlight) 
    (setq paren-sexp-mode t) 

其亮點二括號之間的所有文本。當光標在開放圓括號之上時,它工作的很好,但是從另一邊開始,我必須在閉合圓括號之後放置光標。這會導致在與粘液一起使用時出現奇怪的行爲(這要求將光標置於右括號以顯示一般的使用信息等)。有沒有什麼方法可以改變這種行爲,並且在光標位於右括號旁時使emacs與括號匹配?

編輯:小語法修復

+0

相關:http://unix.stackexchange.com/questions/98850/emacs-changing-show-paren-mode-areas(那裏有'show-paren-mode'而不是'mic-paren')。 – Tobias 2014-09-03 17:06:36

+0

它也留下了餘輝。不是我被它困擾... – 2014-09-03 17:28:28

回答

1

的以下爲「mic-paren」的作品。但是,它有一些餘輝;-)。如果光標位於結束分隔符處或其後面,則開始分隔符會突出顯示。

(defadvice mic-paren-highlight (around cursorOnClosing activate) 
    "Dirty hack to highlight sexps with closing delim below cursor" 
    (if (eq (char-syntax (following-char)) ?\)) 
     (let ((paren-priority 'close)) 
     (save-excursion 
      (forward-char) 
      ad-do-it)) 
    ad-do-it)) 

自然,使這項工作,你需要正確安裝mic-paren。只要按照mic-paren.el安裝指南這裏列舉:

安裝:

  • 將該文件放在一個目錄中的「負載路徑和字節編譯 它。你當然可以忽略這些警告。
  • 把你的.emacs文件如下: (GNU Emacs支持MIC-括號只在一個窗口系統,但XEmacs的 支持MIC-括號也沒有X)
(when (or (featurep 'xemacs) window-system) 
     (require 'mic-paren) ; loading 
     (paren-activate)  ; activating 
    ; set here any of the customizable variables of mic-paren: 
    ; ... 
    ) 
  • 重新啓動Emacs的。 mic-paren現已安裝並激活!
  • 要列出可能的自定義項,請輸入C-h f paren-activate' or go to the customization group mic-paren-matching'。

EDITS:

  • 遵循Stefan的約(featurep 'xemacs)
+0

餘輝!一旦我得到你的意思,讓我開懷大笑。我在你的答案中加入了一個鉤子,以防emacs(昨天 - 我)的新手認爲它沒有工作(再次 - 昨天 - 我)。 – 2014-09-03 17:11:46

+0

'(string-match「XEmacs \\ | Lucid」emacs-version)'應該寫成'(featurep'xemacs)',它不僅更短,而且效率更高(字節編譯器完全優化它)。 – Stefan 2015-04-13 13:04:34

+0

@Stefan採納了你的建議。 – Tobias 2015-04-15 14:42:57

2

不知道麥克風輸入括號,但使用內置show-paren-mode,你可以得到你想要什麼的Emacs 24.4搭配:

(defun my-show-paren-any (orig-fun) 
    (or (funcall orig-fun) 
     (if (looking-at "\\s)") 
      (save-excursion (forward-char 1) (funcall orig-fun))))) 

(add-function :around show-paren-data-function #'my-show-paren-any) 
+0

你定義了一個名爲#'add-function的自定義函數嗎?啓動時,emacs發出此警告\ n「警告(初始化):加載'/home/naman/.emacs'時發生錯誤: 符號的函數定義爲void:add-function」 – 2014-09-03 16:56:57

+0

@namandixit'add-function'在emacs 24.4中是新的。見http://www.masteringemacs.org/articles/2013/12/29/whats-new-in-emacs-24-4/。 – Tobias 2014-09-03 17:01:57

+0

@Tobias 24.3還有其他選擇嗎? – 2014-09-03 17:21:46

1

什麼要記住重要的是,Emacs中的觀點是:兩者之間的角色,在字符不暗示。對於要觸發的show-paren設施,該點必須立即位於父母的外面,無論是打開還是關閉。觀察到的不對稱是由塊光標被任意放置在該點之後(而不是之前)字符上引起的。

如果這讓您感到不安,那麼一種解決方法是使用線條光標而不是塊光標。

show-paren-mode正在針對下一個版本進行增強,這樣它也會觸發paren中立即生效的點。

+0

哪個版本是「下一個」?我有24.5,當光標位於關閉位置時,括號仍然不會突出顯示(塊光標不能位於符號之間,僅在其中一個位置)。 – 2016-06-20 13:59:31