2009年7月15日水曜日

[開発環境]Emacs + Rinari + yasnippet

Rinari

先日 emacs-rails を入れたばかりなのですが、.erb への対応が微妙だったりするため、Rinari を導入してみました。

Rinari は、emacs の Ruby on Rails 用マイナーモードです。
公式サイトによると、メジャーモードとして、Ruby Mode/YAML Mode/CSS Mode/JavaScript Mode が選べるようです。

参考サイト
インストールと設定は、公式サイトと参考サイトの通りに進めばOK.
rhtml-mode もぜひ入れましょう。.html.erb にも対応しています。


ナビゲーション

Webアプリ開発で特にストレスになる関連ファイル間の行き来。ナビゲーションとは、ファイルの行ったり来たりを助けるショートカットキーの集まりです。
Rinari にはナビゲーションのためのキーバインドがたくさんあります。-> 全キーバインドはこちら
その中でも、自分が特に頻繁に使うと思うものをあげてみます。

C-c ; f c (controller を開く)
モデルやビュー、ヘルパ、migrationファイルを開いた状態で叩くと、関連するコントローラにとびます。関連するコントローラが定まらない場合(javascriptを開いているとか)、選択モード(TAB補完)になります。

C-c ; f h (helper を開く)
モデルやビュー、コントローラ、migrationファイルを開いた状態で叩くと、関連するヘルパにとびます。関連するヘルパが定まらない場合、選択モードになります。

C-c ; f i (migration を開く)
モデルやビュー、コントローラ、ヘルパを開いた状態で叩くと、関連するmigrationファイルにとびます。関連するmigrationファイルが定まらない場合、選択モードになります。

C-c ; f m (model を開く)
migrationファイル、ビュー、コントローラ、ヘルパを開いた状態で叩くと、関連するモデルにとびます。関連するモデルが定まらない場合、選択モードになります。

C-c ; f v (view を開く)
コントローラのアクションメソッドの行にカーソルを置いた状態で叩くと、関連するビューにとびます。関連するビューが定まらない場合、選択モードになります。

C-c ; が Rinari のキーバインドをあらわすプレフィックスのようです。
f(ind) c(ontroller) など、直感的なのですぐ覚えられます。

# ほんとはここに C-c ; f t (test を開く) も入れとかないと。。。


実行モード

rake, console起動, server起動なども emacs から可能になります。

M-x rinari-rake (or C-c ' r) : rake 実行

M-x rinari-console (or C-c ' c) : script/console 起動

M-x rinari-sql (or C-c ' q) : 対話モードのDBクライアント起動
- 私の環境 (sqlite3) では、SQLを入力すると "Unable to open database" というエラーが出て動きません(「sqlite>」 というプロンプトは出ます)。;_;

M-x rinari-web-server (or C-c ' w) : script/server 起動
- 停止させる場合は C-c C-c を入力します。通常(シェルから起動した場合)の C-c では止まりません。

M-x rinari-test (or C-c ' t) : カーソル位置の test function, もしくは関連する test function の実行

yasnippet

yasnippet は、コード補完 Emacs Lisp です。
また、メニューから豊富なSnippet(よく使うコードの切れ端?)を選んでソース中に貼り付けられるようになります。
自作Snippetを追加したり、カスタマイズすると強力なツールになるとのことらしい。

導入方法は、こちらに詳しいです。

yasnippet.elをインストールしてみた

デフォルトで含むのは ruby-mode のみなので、Rails 用の拡張もこちらから入手してきます。


# 私の環境では、def ~ end の補完や、{ } (ブロック) の補完はしてくれません。snippet.el だとできたのですが。設定が良くないのでしょうか。
 → def ~ end や { } (ブロック) の補完は、ruby同梱の ruby-electric.rb がやってくれます。
(設定に以下を追加)
;; ruby-electric.el --- electric editing commands for ruby files
(require 'ruby-electric)
(add-hook 'ruby-mode-hook '(lambda () (ruby-electric-mode t)))

一応、参考までに。
.emacs 設定 (for Rinari & yasnippet)


;; rinari
(add-to-list 'load-path (expand-file-name "~/emacs/site-lisp/rinari"))
(require 'rinari)

(add-to-list 'load-path (expand-file-name "~/emacs/site-lisp/rhtml"))
(require 'rhtml-mode)
(add-hook 'rhtml-mode-hook
(lambda () (rinari-launch)))

;; yasnippet
(require 'yasnippet)
(yas/initialize)
(yas/load-directory "~/.emacs.d/snippets")
(yas/load-directory "~/.emacs.d/rails-snippets")

;; ruby-electric.el --- electric editing commands for ruby files
(require 'ruby-electric)
(add-hook 'ruby-mode-hook '(lambda () (ruby-electric-mode t)))

0 件のコメント:

コメントを投稿