Emacs + Clojure配置的几个Tip

    xiaoxiao2023-12-17  159

    很久没更新博客了,在北京工作,忙碌并且充实。目前来说,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

    相关资源:Emacs配置文件
    最新回复(0)