莊周夢(mèng)蝶

          生活、程序、未來(lái)
             :: 首頁(yè) ::  ::  :: 聚合  :: 管理

          Emacs + Clojure配置的幾個(gè)Tip

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

              很久沒更新博客了,在北京工作,忙碌并且充實(shí)。目前來(lái)說(shuō),Clojure最好的開發(fā)編輯器應(yīng)該是Emacs + Slime的組合,利用swank-clojure這個(gè)項(xiàng)目,加上clojure-mode,可以完美地運(yùn)行slime。編譯、運(yùn)行、跳轉(zhuǎn)、文檔和引用查看甚至debug都可以搞定。具體配置恕不重復(fù),看swank-clojure的文檔即可自己安裝起來(lái),或者這篇中文博客windows上配置

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

              首先是自動(dòng)在打開clj后綴文件的時(shí)候啟動(dòng)執(zhí)行clojure-jack-in與slime連接,可以在emacs配置里加上個(gè)callback:

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

              將clj后綴的文件自動(dòng)關(guān)聯(lián)到clojure-mode:
          (setq auto-mode-alist (cons '("\\.clj$" . clojure-mode) auto-mode-alist))
              通常來(lái)說(shuō)如果你是利用marmalade安裝的,會(huì)自動(dòng)關(guān)聯(lián)的。

              另外,啟動(dòng)自動(dòng)匹配括號(hào)、字符串引號(hào)等的paredit模式一定要啟動(dòng):
          (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的時(shí)候自動(dòng)啟用paredit模式,括號(hào)再也不是問題。括號(hào)匹配提示一般是開啟的,如果沒有,強(qiáng)制開啟:

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

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

          (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)))

              細(xì)心的朋友可能注意到我注釋了slime-fuzzy-complete的配置,這是一個(gè)支持更好的自動(dòng)補(bǔ)全功能的SLIME插件(可以用縮寫來(lái)自動(dòng)補(bǔ)全),可惜在我機(jī)器上沒有嘗試配置成功,有興趣你可以嘗試下。

              在REPL里支持語(yǔ)法高亮,一定要配置上:

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

              單獨(dú)在clojure-mode(在其他mode里這些快捷鍵不會(huì)起作用)里配置快捷鍵可以這樣:
          (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-/作為自動(dòng)補(bǔ)全的快捷鍵,因?yàn)閙eta鍵在我的Mac機(jī)器上設(shè)置為command鍵,因此自動(dòng)補(bǔ)全的操作習(xí)慣就跟Eclipse類似。而slime-selector是一個(gè)非常有用的函數(shù),用來(lái)跳轉(zhuǎn)到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)

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

          評(píng)論

          # re: Emacs + Clojure配置的幾個(gè)Tip  回復(fù)  更多評(píng)論   

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

          # re: Emacs + Clojure配置的幾個(gè)Tip  回復(fù)  更多評(píng)論   

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

          # re: Emacs + Clojure配置的幾個(gè)Tip[未登錄]  回復(fù)  更多評(píng)論   

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

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

          # re: Emacs + Clojure配置的幾個(gè)Tip  回復(fù)  更多評(píng)論   

          2012-05-21 23:19 by Unmi
          vim 自然是比不過 Emacs,但是 Emacs 的學(xué)習(xí)曲線太陡了些,曾經(jīng)想好好學(xué)下 Emacs,每次都退卻了。最近在 Mac 下發(fā)現(xiàn) TextMate 是個(gè)很好的東西,有很強(qiáng)大的 Bundle 支持,并且在 Windows 下也有對(duì)應(yīng)品,即 e-editor,它和 TextMate 的 Bundle 是可以通用的。

          # re: Emacs + Clojure配置的幾個(gè)Tip  回復(fù)  更多評(píng)論   

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

          TextMate不錯(cuò),但是挺貴的,用盜版不合適。

          # re: Emacs + Clojure配置的幾個(gè)Tip  回復(fù)  更多評(píng)論   

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

          # Clojure新的開發(fā)工具Lightable  回復(fù)  更多評(píng)論   

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

          另外 Clojure社區(qū)最近引起關(guān)注的是一款正在開發(fā)的IDE LightTable 。 我的關(guān)于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  回復(fù)  更多評(píng)論   

          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?
          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.
          主站蜘蛛池模板: 随州市| 岳普湖县| 肃南| 河南省| 梁河县| 石河子市| 固安县| 威信县| 察哈| 余姚市| 蒙山县| 汾西县| 佛坪县| 静安区| 子洲县| 武胜县| 正镶白旗| 临泉县| 阜阳市| 托里县| 西宁市| 日喀则市| 宽城| 古丈县| 慈利县| 九江市| 兴城市| 和政县| 深圳市| 调兵山市| 紫云| 瓮安县| 新田县| 安达市| 丹寨县| 汾阳市| 长沙市| 德格县| 克拉玛依市| 醴陵市| 合江县|