Spacemacs, Cider 及 Reveal

本文使用practicalli 的 Spacemacs配置以及Clojure配置。

若希望快速上手,可使用下面命令获取Spacemacs及Clojure配置:

git clone --depth=1 git@github.com:practicalli/spacemacs.d.git ~/.spacemacs.d
git clone --depth=1 https://github.com/practicalli/Clojure-deps-edn ~/.clojure

安装Spacemacs并配置Clojure

假设你已经安装好Clojure开发环境,如果还没有可以参考这里安装。

对于国内用户,由于网络状态的原因,需要修改两个地方:

  1. 使用Spacemacs时需要添加国内镜像,参考我的上一篇文章修改。
  2. 添加 clojars 的清华源,修改~/.Clojure/deps.edn,找到mvn/repos部分并修改:
    :mvn/repos {
        ;; ...
        ;; 取消下面的注释
        "clojars-china-mirror" {:url "https://mirrors.tuna.tsinghua.edu.cn/clojars/"}
        ;; ...
    }
    

Clojure与Maven使用相同仓库,且Maven的配置,即~/.m2/settings.xml有更高优先级。也就是说当deps.edn存在同名镜像时,会使用.m2/settings.xml的设置。

配置deps.edn

  • 创建Clojure项目:
    Clojure -X:project/new :name august/playground
    cd playground/
    
  • 添加.dir-locals.el,内容如下
    ((Clojure-mode . ((cider-preferred-build-tool . Clojure-cli)
                      (cider-Clojure-cli-global-options . "-M:inspect/reveal-nrepl-cider")
                      (cider-jack-in-dependencies . nil)
                      (cider-jack-in-nrepl-middlewares . nil)
                      (cider-jack-in-lein-plugins . nil)
                      (cider-Clojure-cli-parameters . ""))))
    
  • 使用Spacemacs打开此项目的源码,此时会提示如下信息,输入y确认:
    The local variables list in august/playground
    contains variables that are risky (**).
    
    Do you want to apply it?  You can type
    y  -- to apply the local variables list.
    n  -- to ignore the local variables list.
    
        cider-preferred-build-tool : Clojure-cli
        cider-Clojure-cli-global-options : "-M:inspect/reveal-nrepl-cider"
     ** cider-jack-in-dependencies : nil
     ** cider-jack-in-nrepl-middlewares : nil
     ** cider-jack-in-lein-plugins : nil
        cider-Clojure-cli-parameters : ""
    

如果没有出现上面的提示那可以按下SPC SPC 然后输入 revert-buffer 强制重新加载buffer.

  • 打开REPL:, |, 选择 cider-jack-in-clj,REPL启动成功后Emacs会打开Cider NREPL,同时还会打开Reveal的窗口。

修改 Reveal 窗口的样式

默认Reveal主题字体很小且不支持中文,可以使用JVM参数,也可以修改 ~/.Clojure/deps.edn:inspect/reveal-nrepl-cider 对应的值:

:inspect/reveal-nrepl-cider
  {:extra-deps {vlaaad/reveal                 {:mvn/version "1.1.159"}
                nrepl/nrepl                   {:mvn/version "0.8.3"}
                cider/cider-nrepl             {:mvn/version "0.25.4"}
                refactor-nrepl/refactor-nrepl {:mvn/version "2.5.0"}}
    ;; 修改主题,字体
   :jvm-opts   ["-Dvlaaad.reveal.prefs={:theme,:light,:font-family,\"WenQuanYi Micro Hei Mono\",:font-size,28}"]
   :main-opts  ["-m" "nrepl.cmdline"
                "--middleware" "[vlaaad.reveal.nrepl/middleware,refactor-nrepl.middleware/wrap-refactor,cider.nrepl/cider-middleware]"]}

参考