Emacsの対Ruby用装備を整える
去年の前半はScalaでわいわいやっていて、Emacsもensime前提で設定していたのですが去年の暮れから今年にかけてRubyを書かなくてはいけなくなったのでRuby用のelispをそろえていきます。
Ruby用elisp
しかしアレです。Emacs+Java/Scalaだと情報が少ないのですが、Emacs+Rubyだとすぐに情報が集まります。よさげなエントリを見かけたので、それをそのまま拝借します。
block-given.hatenablog.com
qiita.com
設定ファイルの分離とパッケージインストール前提の構成
とりあえず、以下のようにしてみました
~/.emacs.d/ruby.el
package-install はEmacs-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)