Spacemacs, Cider 及 Reveal

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

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

git clone --depth=1 [email protected]: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]"]}

信任.dir-locals.el里的参数

使用.dir-locals.el后,每次打开项目的文件时都会询问是否执行其中的操作,如果觉得这些询问太烦,你可以在把这些操作加入信任列表(safe-local-variable-values)。方法是使用SPC f e d打开Spacemacs配置文件,找到dotspacemacs/emacs-custom-settings函数里的custom-set-variables,修改或添加safe-local-variable-values配置项,例如:

 '(safe-local-variable-values
   '(
      ;;;
     (cider-clojure-cli-parameters . "")
     (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)
     ;;;
     ))

保存后使用SPC f e R重新加载配置文件,再打开项目文件时就不会出现提示了。

参考

Comment