動機
Scala基礎勉強会にて、Scalaを書くのにemacsを使っている人が多数いたので、エクなんとかというエディタのことはこの際忘れて、
eMacsでscaLaを書くことに挑戦しようと思い、設定方法などを記事にする次第。
環境
- CentOS 6.3(64bit)
- GNU emacs 24.2.2
で何を入れるの?
scala-mode2
まずは、scala-mode2という、Scala用のメジャーモードを使用します。scala-mode2は下記の機能を提供してくれます。
- インデント
- シンタックスハイライト
- モーションコマンド
- インデント:完成(finalized)
- ハイライト:仕掛り中
- モーションコマンド:emacsの標準的なものについては対応していますが、Scalaに特化したものはまだ対応できていない
scala-mode2はGNU emacsの24.2を対象に開発されています。
24より過去にはない機能を使っているそうなのでご注意を。
設定手順
昔はScala本体と一緒に配布されて気もしますが、今はGithubからダウンロードするようです。 ファイルをダウンロードします。
git clone git://github.com/hvesalai/scala-mode2.git
パスなどの情報をemacsの初期化ファイル(自分の場合は~/.emacd.d/init.el)に書き込んでやります。
(add-to-list 'load-path "/path/to/scala-mode2/") (require 'scala-mode)
基本的にはこれだけです。Emacsを起動して、.scalaファイルを開くと、Scalaモードになっていると思います。
ENSIME
が、これだけだとScalaをばりばり書くには物足りません。やはり補完とかリファクタリングしたいですよねー。
ということでENSIMEを使います。
ENSIMEとは"ENhanced Scala Interaction Mode for Emacs"の略称とのこと。
えんざいむ、と読むそうな。
ENSIMEを導入することにより、
- ファイルを保存するたびにコンパイルエラーを確認できる
- 補完
- 基本的なリファクタリング
- シンボルのインスペクション
- パッケージ/型のブラウジング
- デバッグ(※ステータスはwork in progress)
emacsの対象バージョンは22以降。23が推奨されています。
が、私が試している限り、24.2でも問題なく動いています。
設定手順
Downloadサイトから適切なファイルを取得します。展開後、emacsの初期化ファイルに下記を追記します。
(add-to-list 'load-path "ENSIME_ROOT/elisp/") (require 'ensime) (add-hook 'scala-mode-hook 'ensime-scala-mode-hook)
SBTから設定ファイルを作成
ENSIMEを使うには、設定ファイルを作成する必要があります。
設定ファイルを作成する方法は以下の2つの方法が用意されています。
- ウィザード形式で対話的に作成する
- SBTプロジェクトにて、ENSIMEプラグインを使って生成する
今回は、Play Frameworkで新規作成したプロジェクトについて、ENSIMEの設定ファイルを生成してみます。
※Play Frameworkのバージョンは、2.1-RC1を使います。
{プロジェクトルート}/project/plugins.sbt に下記の通り追記します。
addSbtPlugin("org.ensime" % "ensime-sbt-cmd" % "0.1.0")
その後、プロジェクトルートにて
play ensime generate
とやるとENSIMEの設定ファイル(.ensime)がプロジェクトルートに作成されます。
ENSIMEの有効化
{プロジェクトルート}/app/controllers/Application.scala をemacsで開いてみます。
右下に[ENSIME: No Connection]というのが見えますね。
M-x ensime
としてやるとENSIMEの機能を有効にできます。
ENSIMEを使った際の画面イメージは?
totoshiさんが
EmacsでつくるScala開発環境 後編(ENSIME)
という分かりやすいポストを書かれているのでご参照ください。
最後に
正直、私のemacs力が低いため、未だemacsでScalaをバリバリ書ける!という状態ではないのですが、
だんだんと慣れていけたらなぁと思います。
明日は@youku_sさんと@kotashanさんが担当です。
0 件のコメント:
コメントを投稿