EmacsでつくるScala開発環境 前編(scala-mode)
ちょっと量が多いので2回に分けます。
前編はscala-mode
後編はENSIME(scala IDE)
今日は前編
scala-modeについて
scala-mode
インストール
Emacsにはデフォルトでscala用のモードは入っていません。
自分でscala-modeをインストールする必要があります。
scala-modeはScalaの配布パッケージに含まれています。
まずscalaのtarをダウンロードします。
現在の安定板は2.8.0.finalです。
まずはダウンロード
$ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.8.0.final.tgz
展開します。
$ tar zxvf scala-2.8.0.final.tgz
scala-2.8.0.final/misc/scala-tool-support/emacs 以下にemacs用のelファイルがまとめて入っています。
ディレクトリごと~/.emacs.d以下に持っていきましょう。そしてついでに名前も変更
$ cp -r scala-2.8.0.final/misc/scala-tool-support/emacs ~/.emacs.d/scala-mode
次にemacsの設定をします。設定ファイル(.emacsやinit.el)に次のように書きます。
(add-to-list 'load-path "~/.emacs.d/scala-mode") (require 'scala-mode-auto)
scala-modeをインストールすると、scalaのファイルを開くと自動的にscala-modeになります。
もし自動でscala-modeにならなかったら次の1行を設定ファイルに加えてください。
(add-to-list 'auto-mode-alist '("\\.scala$" . scala-mode))
以上でインストール完了です。
使い方
このモードには便利なコマンドがいくつかあります。
是非使いましょう。
まずは
M-x scala-run-scala
scalaインタプリタが起動し、*inferior-scala*バッファが開きます。
これで次のようなコマンドが使えるようになります。
scala-eval-buffer は今編集しているバッファを評価します。
やってみましょう。
def Hello = println("Hello")
とバッファに入力。
ここでCtrl-C Ctrl-b(scala-eval-buffer)。すると
バッファ内が評価され、*inferior-scala*バッファにその結果が吐かれました。
*inferior-scala*バッファはもちろん普通のscalaインタブリタとしても使えます。
*inferior-scala*バッファに移動し、さっき評価したHello関数を呼んでみましょう。
ほら。
scala-eval-regionもscala-load-fileもこれと似たようなコマンドです。
コマンド名の通り、scala-eval-regionは選択した範囲を評価、scala-load-fileは指定したファイルをロードします。
*inferior-scala*バッファはEmacs上からscalaインタプリタ使えるってだけで便利です。
自分は↓こうやって編集バッファと*inferior-scala*バッファとの間を
Ctrl+c Ctrl+zで行き来できるようにしてます。
(defvar my-scala-current-buffer nil) (defun my-scala-switch-to-interpreter () (interactive) (setq my-scala-switch-to-interpreter (current-buffer)) (unless (scala-interpreter-running-p-1) (scala-run-scala "scala")) (scala-switch-to-interpreter)) (defun my-scala-back-to-editing-buffer () (interactive) (switch-to-buffer my-scala-current-buffer)) (define-key scala-mode-map "\C-c\C-z" 'my-scala-switch-to-interpreter) (define-key scala-mode-inf-map "\C-c\C-z" 'my-scala-back-to-editing-buffer)
scala-electric-mode
scala-modeと一緒にscala-electric-modeっていうのがあるのでこいつも使いましょう。
ruby-mode に ruby-electric-modeってのくっついてますよね。あれと同じ。
設定ファイルに次のように付け加えてください。
(require 'scala-mode-feature-electric) (add-hook 'scala-mode-hook (lambda () (scala-electric-mode)))
{ を入力すると勝手に } を入力してくれたりします。
以上、scala-modeの紹介でした。
次回はENSIMEについて。お楽しみに。
2010/10/30 追記
scala-mode + imenu - tototoshiの日記
scala-modeでimenu使えるようにする設定
2010/11/1 追記
scalaのタグジャンプ
Scala + Emacs + ctags - tototoshiの日記
2011/2/13追記
scala-modeで*inferior-scala*をポップアップさせるadvice - tototoshiの日記