基本的には 公式のdevelopブランチのドキュメントに従う感じで。
SpacemacsのScala設定
scala-backend
として Ensime
を使う。Spacemacsでensimeをダウンロードし、Scala Layerでensimeを指定する。
dotspacemacs-configuration-layers
'(sql
markdown
;; 上のsqlやmarkdownみたいな感じで以下を追記
(scala :variables
scala-backend 'scala-ensime
scala-auto-start-backend t)
)
(defun dotspacemacs/user-init ()
;; melpaからのインストールはstable (安定版)を指定
(add-to-list 'configuration-layer-elpa-archives '("melpa-stable" . "stable.melpa.org/packages/"))
;; Scala backend
(add-to-list 'package-pinned-packages '(ensime . "melpa-stable"))
)
sbtインストール
(JDK8以上が必要だが、その案内もリンク先に書かれている)
Ensimeの準備
- ユーザディレクトリ直下にあるはずの
.sbt
ディレクトリから辿って、~/.sbt/1.0/plugins/plugins.sbt
となるようにplugins.sbt
を作る -
plugins.sbt
にはaddSbtPlugin("org.ensime" % "sbt-ensime" % "2.5.1")
を書いとく - sbtを起動して
ensimeConfig
コマンドを打つ - 完
.classファイルの取得?
設定しただけでは、他プロジェクトのパッケージをimportできないらしい。 object xxx is not a member of package
みたいなエラーが出る。
どうも .class
ファイルを作ると良いらしい?ターミナルを立ち上げ、プロジェクト直下で sbt test:compile
すると解決した。
https://github.com/ensime/ensime-emacs/issues/236#issuecomment-138700317
定義ジャンプが一部壊れているっぽい
こちらで議論されているように、直接ジャンプできない部分がある。
https://github.com/syl20bnr/spacemacs/issues/7144
具体的には 関数が定義されたファイルをSpacemacsで開いていない場合
。というのは議論にもコメントされていた。
Spacemacsで開く、というのは、つまりバッファとして存在するという意味 ( Space b b
でバッファ一覧に存在する状態)
ちなみに、定義したファイルを開いていない状態でも、参照元から 関数
ではなく その関数が定義されているオブジェクト自体
に定義ジャンプすることはできる模様?