auto-complete + rsense の代わりに auto-complete + robe をつかう
ながらく emacs 上での auto complete に Auto-Complete + RSense を使っていました. べんりでしたが, もうメンテされていないようで代替を探していました.
試しに Robe を RSense の代わりに使ってみようと思います.
- 2014/07/06 追記: robe パッケージ内のファイル名変更など最新版に対応
そもそも, なんでAuto-Complete + Robe ?
RSense のよくないところ
Robe って?
- 随時, ファイルや書きかけているコンテキストを読んでメソッド名などを絞り込む
- Auto-Complete や company-mode などの backend としてつかう
- inf-ruby なので, 環境に応じた ruby バージョン用の補完候補が出る
- emacs + ruby だけで事足りる
Auto-Complete vs. company-mode
Auto-Complete を使い続ける強い理由はありませんが, パフォーマンスに満足しているし, インターフェイスに慣れているからですかね.
比較できるほど company-mode を使ってないんですけどね.
比較記事はあまりないかもしれません.
Install
(Emacs24.3)
MELPA を使う
さくっとインストールしたいひとは MELPA つかいましょう.
あまり ELPA を好んで使わないので, 僕は必要になった時点で 以下を eval-region
することが多いです.
(require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
その後 M-x package-refresh-contents
します.
Auto-Complete, Robe
emacs の mini buffer で
M-x package-install Install package: auto-complete
で完了. 簡単ですね. Robe も同様にインストールします.
Manual Install
load-path
に入れた ~/.emacs.d/site-lisp
や, ~/.emacs.d/etc
全体を git で管理している都合で 普段はなるべく手動インストールしています.
Auto-Complete
curl -O http://cx4a.org/pub/auto-complete/auto-complete-1.3.1.tar.bz2 tar jxvf auto-complete-1.3.1.tar.bz2 mkdir ~/.emacs.d/{site-lisp,etc}/auto-complete cp auto-complete-1.3.1/*.el ~/.emacs.d/site-lisp/auto-complete/ cp auto-complete-1.3.1/dict/* ~/.emacs.d/etc/auto-complete/
inf-ruby
ruby-2.1.0 に含まれるinf-ruby.el (Revision 1.7) だとRobe が動作しないため, 最新版をインストールします.
curl https://raw.github.com/nonsequitur/inf-ruby/master/inf-ruby.el > ~/.emacs.d/site-lisp/inf-ruby.el
Robe
git clone https://github.com/dgutov/robe.git
mkdir ~/.emacs.d/site-lisp/robe
cp -r robe/{*robe.el,lib} ~/.emacs.d/site-lisp/robe
pry
pry も必要なので
gem install pry
.emacs
設定はこんな感じです.
(autoload 'ruby-mode "ruby-mode" "Mode for editing ruby source files" t) (add-to-list 'auto-mode-alist '("\\.rb$" . ruby-mode)) (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode)) (add-hook 'ruby-mode-hook '(lambda () (require 'rcodetools) (require 'anything-rcodetools) (require 'myrurema) (load-auto-complete) # 追加 (define-key ruby-mode-map "\M-c" 'rct-complete-symbol) (define-key ruby-mode-map "\M-d" 'xmp) (setq ruby-deep-indent-paren-style nil))) ; auto-complete (defun load-auto-complete () (require 'auto-complete-config) (ac-config-default) (add-to-list 'ac-dictionary-directories "~/.emacs.d/etc/auto-complete") (setq ac-use-menu-map t) (define-key ac-menu-map "\C-n" 'ac-next) (define-key ac-menu-map "\C-p" 'ac-previous) (setq ac-auto-show-menu 0.5) (setq ac-menu-height 20) (robe-mode)) ; robe (autoload 'robe-mode "robe" "Code navigation, documentation lookup and completion for Ruby" t nil) (autoload 'ac-robe-setup "ac-robe" "auto-complete robe" nil nil) (add-hook 'robe-mode-hook 'ac-robe-setup)
使い方
- ターミナルでも動作します
- 拡張子
.rb
のファイルを開くと, robe-mode に入ります
カレントディレクトリに Gemfile
があれば
M-x robe-start
で補完できるようになります.
inf-ruby が起動していないときは
No Ruby console running. Launch automatically?(yes or no)
と聞かれ, ‘yes’ と答えることで自動的に起動します.
注意: pry が必要 なので Gemfile に
gem 'pry'
と書いておいてください.
Gemfile
がないときは
M-x robe-start
の前に
M-x inf-ruby
でruby console を起動しておく必要があります.