なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

Emacsの対Ruby用装備を整える

去年の前半はScalaでわいわいやっていて、Emacsもensime前提で設定していたのですが去年の暮れから今年にかけてRubyを書かなくてはいけなくなったのでRuby用のelispをそろえていきます。

Rubyelisp

しかしアレです。Emacs+Java/Scalaだと情報が少ないのですが、Emacs+Rubyだとすぐに情報が集まります。よさげなエントリを見かけたので、それをそのまま拝借します。
block-given.hatenablog.com
qiita.com

設定ファイルの分離とパッケージインストール前提の構成

とりあえず、以下のようにしてみました

~/.emacs

~/.emacs.d/ruby.el のように設定ファイルを準備して、本体の設定と分けます。

;; ruby-mode
(load "~/.emacs.d/ruby")
~/.emacs.d/ruby.el

package-installEmacs-24で標準になっているので、パッケージ無ければ更新の構成にします。
El-get/Cask?知りません。使えたらいいのです。

"~/.rbenv"の設定場所が重要だと思います。環境によっては変えなくては。

(unless (package-installed-p 'rbenv)
  (package-refresh-contents) (package-install 'rbenv))
(unless (package-installed-p 'ruby-block)
  (package-refresh-contents) (package-install 'ruby-block))
(unless (package-installed-p 'ruby-end)
  (package-refresh-contents) (package-install 'ruby-end))
(unless (package-installed-p 'inf-ruby)
  (package-refresh-contents) (package-install 'inf-ruby))

;; rbenv
(require 'rbenv)
(global-rbenv-mode)
(setq rbenv-installation-dir "~/.rbenv")
;; coding style
(electric-pair-mode t)
(add-to-list 'electric-pair-pairs '(?| . ?|))
;; highlight block
(require 'ruby-block)
(setq ruby-block-highlight-toggle t)
;; highlight end
(require 'ruby-end)
;; inf-ruby
(require 'inf-ruby)
(setq inf-ruby-default-implementation "pry")
(setq inf-ruby-eval-binding "Pry.toplevel_binding")
(add-hook 'inf-ruby-mode-hook 'ansi-color-for-comint-mode-on)
;; ruby-mode
(setq ruby-indent-level 3)
(add-hook 'ruby-mode-hook
          '(lambda ()
             ;; ruby-modeの自前スタイル設定
             (setq ruby-indent-level 3)
	     ))

inf-ruby rbenvとの連携はbashrcに書くしかなさそう。
github.com

EDIT: 2020年現在だとexec-path-from-shellが使えそう

その他必要だったために入れたものなど

delete-trailing-whitespace … 末尾の空白削除
markdown-mode … markdown形式を読みやすく
coffee-mode … coffee scriptを書くとき
slim-mode … slimを書くとき
yaml-mode  … yamlを書くとき(必須!)

;; 行末の空白削除
(add-hook 'before-save-hook 'delete-trailing-whitespace)

;; markdown
(unless (package-installed-p 'markdown-mode)
  (package-refresh-contents) (package-install 'markdown-mode))
(autoload 'markdown-mode "markdown-mode.el" "Major mode for editing Markdown files" t)
(setq auto-mode-alist (cons '("\\.md$" . markdown-mode) auto-mode-alist))

;; coffee
(unless (package-installed-p 'coffee-mode)
  (package-refresh-contents) (package-install 'coffee-mode))
(add-to-list 'auto-mode-alist '("\\.coffee?\\'" . coffee-mode))

;; slim
(unless (package-installed-p 'slim-mode)
  (package-refresh-contents) (package-install 'slim-mode))
(add-to-list 'auto-mode-alist '("\\.slim?\\'" . slim-mode))

;; yaml
(unless (package-installed-p 'yaml-mode)
  (package-refresh-contents) (package-install 'yaml-mode))
(require 'yaml-mode)
(add-to-list 'auto-mode-alist '("\\.ya?ml$" . yaml-mode))
(define-key yaml-mode-map "\C-m" 'newline-and-indent)