すごい.emacs

この動画の人の.emacs.
これ見た時から, すごいなあ, どんな.emacsなんだろうと気になってたんだけど, 公開してくれたみたい.
ここね.
注意書きでは, 修正しないとそのままでは動かないだろうってことらしい.



でかくてまだ軽くしか見ないんだけど, Ruby関係でこれはすごいと思ったのが3つ(まだまだありそうだけど, 理解が追い付かない).

(add-to-list 'align-rules-list
             '(ruby-comma-delimiter
               (regexp . ",\\(\\s-*\\)[^# \t\n]")
               (repeat . t)
               (modes  . '(ruby-mode))))
(add-to-list 'align-rules-list
             '(ruby-hash-literal
               (regexp . "\\(\\s-*\\)=>\\s-*[^# \t\n]")
               (repeat . t)
               (modes  . '(ruby-mode))))

見ての通り, こいつは, alignの設定.
カンマとハッシュについてみたい.
あんまり試してない.
先に(require 'align)しておく必要がある.


こいつが一番ビビった.
ruby-electric.elをロードパスのある場所に配置し, 先に(require 'ruby-electric)しておく必要がある.

;; Hide-show
(require 'hideshow)
(add-to-list 'hs-special-modes-alist
  (list 'ruby-mode
        (concat "\\(^\\s-*"
                ruby-electric-simple-keywords-re
                "\\|{\\|\\[\\)")
        "end\\|\\]\\|}" "#"
        'ruby-forward-sexp nil))

そして, このマイナーモードruby-electric-modeを起動すると, 次のような補完入力ができるようになる.
forとまで入力して, スペースを入れるとendを補完してくれる.
もちろん, whileでもclassでもunlessでもOK.
ruby-electric-modeは, brackets.elみたいに括弧とかの補完をするモードみたいだね(開始括弧を入力すると閉括弧も挿入してくれるモード).
だから, brackets.elとはちょっと相性が良くない.

追記(0104)

勘違い炸裂.
whileとかでendを補完してくれるのは, 単純にruby-electric-modeの機能.
この設定は, hideshow. つまり, ruby-modeでhs-minor-modeを使えるようにするもの.
hs-minor-modeがオンの状態で, classとかのところにカーソルを置いて, C-c @ C-hとかすると対応するendまでが隠れたりする.
これはこれでかなり便利そう.



そして最後.
こいつはテスト用の関数の補完入力なのかなあ. 詳細は分かんない.

;; Snippets
(snippet-with-abbrev-table 'ruby-mode-abbrev-table
  ("inj" . "$>inject($${[]}) do |$${memo}, $${item}|\n$>$.\nend$>")
  ("def" . "$>def $${method}($${*args})\n$>$.\nend$>")
  ("dt"  . "$>def test_$${method}\n$>$.\nend$>"))

injまで入力してタブを押すと, inject([]) do |memo, item| ...と補完してくれる.
下のdef, dtも同様.


どうせだから, ruby-modeでは, brackets.elをきってruby-electric-modeを最初から起動するようにしといた.
ちょっと他の設定も混ってて綺麗じゃないけど, こんなの書いとけば, OK.

;; 括弧とかの自動挿入
(add-hook 'ruby-mode-hook
          '(lambda()
             (progn
               ;; comment-columnの設定
               (setq comment-column 39)
               ;; camelCase-mode
               (camelCase-mode t)
               ;; ruby-electric-mode
               (ruby-electric-mode t)
               ;; ri-emacsの設定
               (define-key ruby-mode-map [f1] 'ri)
               (define-key ruby-mode-map "\M-\C-i" 'ri-ruby-complete-symbol)
               (define-key ruby-mode-map [f4] 'ri-ruby-show-args)
               ;; C-m で 改行 + インデント
               (define-key ruby-mode-map "\C-m" 'ruby-reindent-then-newline-and-indent)
               )))



見る人が見れば, もっと面白い設定がいっぱいあると思うよ.
自分ではまだまだ理解できません.
と, いうことで一度ダウンロードしてみて中を見てみることをオススメするよ.
設定は, 複数ファイルに分割されてて見やすいし.