在swank-clojure repl中的paredit花括号匹配

时间:2011-12-22 00:32:07

标签: emacs clojure curly-braces paredit

我在Windows 7上使用emacs 24并安装了technomancy's clojure-mode以及paredit 23 beta。我从我的leiningen项目加载源文件并使用clojure-jack-in获取repl。问题是虽然在Clojure模式和repl中都启用了paredit,但仅在源文件中的repl中不匹配花括号。

我怎样才能让它与repl中的大括号相匹配?

2 个答案:

答案 0 :(得分:6)

我在我的.emacs文件中添加了以下内容,这对我来说很有用(我没有自己发明这个,这是我在网上找到的一个片段 - 但我记不起来了):

(defun setup-slime-repl-paredit ()
  (define-key slime-repl-mode-map
    (kbd "DEL") 'paredit-backward-delete)
  (define-key slime-repl-mode-map
    (kbd "{") 'paredit-open-curly)
  (define-key slime-repl-mode-map
    (kbd "}") 'paredit-close-curly)
  (modify-syntax-entry ?\{ "(}")
  (modify-syntax-entry ?\} "){")
  (modify-syntax-entry ?\[ "(]")
  (modify-syntax-entry ?\] ")[")
  (modify-syntax-entry ?~ "'   ")
  (modify-syntax-entry ?, "    ")
  (modify-syntax-entry ?^ "'")
  (modify-syntax-entry ?= "'"))

(add-hook 'slime-repl-mode-hook 'setup-slime-repl-paredit)

(add-hook 'slime-repl-mode-hook       'enable-paredit-mode)

答案 1 :(得分:1)

获得Phil Hagelberg的durendal package,其中 为slime提供一些特定于clojure的增强功能,然后尝试这个片段:

(require 'durendal)
(durendal-enable t)

(defun slime-clojure-repl-setup ()
  (when (string-equal (slime-lisp-implementation-name) "clojure")
    (set-syntax-table clojure-mode-syntax-table)
    (setq lisp-indent-function 'clojure-indent-function)))

(add-hook 'slime-repl-mode-hook 'slime-clojure-repl-setup)

将来,Phil可能会将swure-clojure本身的durendal功能作为额外的lisp有效载荷包含在内,此时上述内容将变得不必要。