莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          Emacs + Clojure配置的幾個Tip

          Posted on 2012-05-19 00:57 dennis 閱讀(15327) 評論(11)  編輯  收藏 所屬分類: Clojure工具和命令

              很久沒更新博客了,在北京工作,忙碌并且充實。目前來說,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)

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

          評論

          # re: Emacs + Clojure配置的幾個Tip  回復  更多評論   

          2012-05-19 20:59 by 獨辮子
          收藏了,挺有用的

          # re: Emacs + Clojure配置的幾個Tip  回復  更多評論   

          2012-05-21 08:16 by tony.li.fly@gmail.com
          請問在linux上開發最好的編輯器是什么,如果是vim的話要裝哪些插件?

          # re: Emacs + Clojure配置的幾個Tip[未登錄]  回復  更多評論   

          2012-05-21 15:15 by xhh
          @tony.li.fly@gmail.com

          https://github.com/vim-scripts/VimClojure

          # re: Emacs + Clojure配置的幾個Tip  回復  更多評論   

          2012-05-21 23:19 by Unmi
          vim 自然是比不過 Emacs,但是 Emacs 的學習曲線太陡了些,曾經想好好學下 Emacs,每次都退卻了。最近在 Mac 下發現 TextMate 是個很好的東西,有很強大的 Bundle 支持,并且在 Windows 下也有對應品,即 e-editor,它和 TextMate 的 Bundle 是可以通用的。

          # re: Emacs + Clojure配置的幾個Tip  回復  更多評論   

          2012-05-22 23:16 by dennis
          @Unmi

          TextMate不錯,但是挺貴的,用盜版不合適。

          # re: Emacs + Clojure配置的幾個Tip  回復  更多評論   

          2012-05-22 23:17 by dennis
          @tony.li.fly@gmail.com
          Emacs不是Mac os專利啊。

          # Clojure新的開發工具Lightable  回復  更多評論   

          2013-04-10 22:59 by John Wang
          我在用Eclipse 的 Countclockwise 。感覺也不錯。

          另外 Clojure社區最近引起關注的是一款正在開發的IDE LightTable 。 我的關于clojure的新博客:
          http://wangjinquan.me/show/Clojure%20%E7%9A%84%E7%BC%96%E8%AF%91%E5%92%8C%E6%89%A7%E8%A1%8C

          # vitalcleansecomplete65113  回復  更多評論   

          2015-02-16 01:33 by Write more, thats all I have to say. Literally, it
          Write more, thats all I have to say. Literally, it seems as though you relied on the video to make your point. You definitely know what youre talking about, why waste your intelligence on just posting videos to your blog when you could be giving us something enlightening to read?

          # mp3gain38105  回復  更多評論   

          2016-02-08 14:55 by Good post. I learn something new and challenging o
          Good post. I learn something new and challenging on blogs I stumbleupon on a daily basis. It's always exciting to read through articles from other authors and practice a little something from other websites.
          主站蜘蛛池模板: 分宜县| 正定县| 红安县| 兴化市| 融水| 灵台县| 九台市| 芒康县| 武安市| 泰安市| 绵竹市| 桑日县| 百色市| 汶川县| 靖远县| 肥乡县| 富蕴县| 清水县| 南华县| 白沙| 云和县| 无极县| 荣昌县| 湛江市| 中方县| 浮山县| 西藏| 临沂市| 苗栗县| 佛冈县| 平遥县| 叙永县| 文安县| 安顺市| 科技| 莱州市| 钟山县| 平利县| 山丹县| 油尖旺区| 开化县|