閱讀220 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Emacs + Clojure配置的幾個Tip

  很久沒更新博客了,在北京工作,忙碌並且充實。目前來說,Clojure最好的開發編輯器應該是Emacs + Slime的組合,利用swank-clojure這個項目,加上clojure-mode,可以完美地運行slime。編譯、運行、跳轉、文檔和引用查看甚至debug都可以搞定。具體配置恕不重複,看swank-clojure的文檔即可自己安裝起來,或者這篇中文博客windows上配置

    分享幾個Tip,也期待大家分享你們的使用心得。

    首先是自動在打開clj後綴文件的時候啟動執行clojure-jack-in與slime連接,可以在emacs配置裏加上個callback:

(eval-after-load "clojure-mode"
  '(progn
     (require 'slime)
     (require 'clojure-mode)
     (unless (slime-connected-p)
       (save-excursion (clojure-jack-in)))))
    這樣在打開clj為後綴的文件的時候,將自動啟動clojure-mode執行clojure-jack-in函數並且連接slime。

    將clj後綴的文件自動關聯到clojure-mode:
(setq auto-mode-alist (cons '("\\.clj$" . clojure-mode) auto-mode-alist))
    通常來說如果你是利用marmalade安裝的,會自動關聯的。

    另外,啟動自動匹配括號、字符串引號等的paredit模式一定要啟動:
(defun paredit-mode-enable () (paredit-mode 1))
(add-hook 'clojure-mode-hook 'paredit-mode-enable)
(add-hook 'clojure-test-mode-hook 'paredit-mode-enable)

   在使用clojure-mode或者clojure-test-mode的時候自動啟用paredit模式,括號再也不是問題。括號匹配提示一般是開啟的,如果沒有,強製開啟:

;;    顯示括號匹配
(show-paren-mode t)
(setq show-paren-style 'parentheses)

    slime更多配置,啟用IO重定向(多線程IO輸出都定向到SLIME repl)以及設置通訊字符編碼等:

(eval-after-load "slime"
  '(progn
     (slime-setup '(slime-repl slime-fuzzy))
     ;;(setq slime-truncate-lines t)
     (setq  swank:*globally-redirect-io*  t)
     ;; (setq slime-complete-symbol-function ' slime-fuzzy-complete-symbol)
     (setq slime-net-coding-system 'utf-8-unix)))

    細心的朋友可能注意到我注釋了slime-fuzzy-complete的配置,這是一個支持更好的自動補全功能的SLIME插件(可以用縮寫來自動補全),可惜在我機器上沒有嚐試配置成功,有興趣你可以嚐試下。

    在REPL裏支持語法高亮,一定要配置上:

(add-hook 'slime-repl-mode-hook
          (defun clojure-mode-slime-font-lock ()
            (require 'clojure-mode)
            (let (font-lock-mode)
              (clojure-mode-font-lock-setup))))

    單獨在clojure-mode(在其他mode裏這些快捷鍵不會起作用)裏配置快捷鍵可以這樣:
(eval-after-load "clojure-mode"
  '(progn
     (require 'slime)
     (require 'clojure-mode)
     (define-key clojure-mode-map (kbd "M-/")  (quote slime-complete-symbol))
     (define-key clojure-mode-map (kbd "C-c s")  (quote slime-selector)))

   例如我這裏將M-/作為自動補全的快捷鍵,因為meta鍵在我的Mac機器上設置為command鍵,因此自動補全的操作習慣就跟Eclipse類似。而slime-selector是一個非常有用的函數,用來跳轉到slime的一係列buffer,因此我綁定了C-c s快捷鍵。

    額外一提,在Mac osx下,將command作為meta鍵:
;;; I prefer cmd key for meta
(setq mac-option-key-is-meta nil
      mac-command-key-is-meta t
      mac-command-modifier 'meta
      mac-option-modifier 'none)


    最後,期待大家不吝分享你的心得

文章轉自莊周夢蝶  ,原文發布時間2012-05-19

最後更新:2017-05-18 20:37:00

  上一篇:go  《Java NIO文檔》非阻塞式服務器
  下一篇:go  5月17日雲棲精選夜讀:分布式大數據係統巧實現,全局數據調度管理不再難