2012-10-21 51 views
6

我在我的emacs init文件中有以下行。如何在emacs nrepl會話中自動獲取paredit?

(setq auto-mode-alist (cons `("\*nrepl\*" . paredit-mode) auto-mode-alist)) 

我檢查這個工程中創建一個名爲* nrepl * Ctrl-x-f *nrepl*新的緩衝區。是的,* nrepl *緩衝區具有Paredit激活,paredit模式已啓用。

我關閉* nrepl *緩衝區而不保存它。

我通過輸入M-x nrepl-jack-in啓動nrepl會話。 nrepl服務器啓動後,我會看到nrepl repl。 nrepl repl也稱爲* nrepl *,但Paredit是而不是啓用。

我在做什麼錯?

回答

6

您在混淆緩衝區和文件:auto-mode-alist將文件名與regexps相匹配,以決定在編輯這些文件時使用哪種模式。但* nrepl *是一個不包含文件的緩衝區,所以auto-mode-alist對它沒有影響。 相反,您可能想知道哪個主要模式* nrepl *使用,然後使用(add-hook '<the-major-mode>-hook 'paredit-mode)

+0

什麼「nrepl-connected」的<主要模式>似乎在做伎倆。總計: (加掛鉤'nrepl-connected-hook'paredit-mode) –

5

簡單地說 - 你需要下面的代碼:

(add-hook 'nrepl-mode-hook 'paredit-mode) ; for nrepl.el <= 0.1.8 
(add-hook 'nrepl-repl-mode-hook 'paredit-mode) ; for nrepl.el > 0.1.8 

即相當於更長的形式:

(add-hook 'nrepl-mode-hook (lambda() (paredit-mode +1)))