*1  folding.el

IRC で「emacs にソースコードの一部を折り畳む機能はあったかな」と言う話題になったのでちょっと探してみた。Debian だと emacs-goodies-el に入っている folding.el だが、これは折り畳みのためにマークをコメントとして入れないといけない。vim fold で言うところの foldmethod=marker 相当になるだろうか。

*2  outline-minor-mode, hs-minor-mode

ソースコードを syntax を基準にした block 単位で折り畳むのには、emacs21 標準の hs-minor-mode (hideshow.el) や outline-minor-mode が使えそうだ。

hs-minor-mode は名前の通り、特定部分を隠したり(hide)表示したり(show)する機能。標準では ruby の folding はサポートされていないが、hs-special-modes-alist に syntax のヒントを与えてやればいいようだ。このあたりはhs-minor-mode で ruby のコメントを折り畳む方法が参考になる。とりあえず
(add-hook 'ruby-mode-hook
          '(lambda()
            (hs-minor-mode 1)))

(let ((ruby-mode-hs-info
       '(ruby-mode
          "class\\|module\\|def\\|if\\|unless\\|case\\|while\\|until\\|for\\|begin\\|do"
          "end"
          "#"
          ruby-move-to-block
          nil)))
  (if (not (member ruby-mode-hs-info hs-special-modes-alist))
      (setq hs-special-modes-alist
            (cons ruby-mode-hs-info hs-special-modes-alist))))
と言う感じで行けるらしい。outline-minor-mode の方で設定するならcomp.lang.python の Code Folding with Emacs や bookshelf.jp の outline-mode 解説が参考になる。どちらにせよキーバインドが C-c @ C-[osaw] 等と指がつりそうなので、何か使い易いものにバインドしなおすのが良さそうだ。

ちなみに C/C++ で #ifdef ... #endif を隠すには hide-ifdef-mode と言うのが使える。html の特定要素を自動的に fold してくれる html-fold.el と言うのも便利そうだ。

と色々並べてみたものの、 vim の folding にそのまま匹敵しそうな機能は見付けられてない。とは言え hs-minor-mode は便利なので常用することになりそう。

( Permalink | Comments (0) | tags: emacs  programming  )
Comments

Please write your comment. email address won't appear. Cannot use any HTML tags in comment.
コメントをお書き下さい。メールアドレスは公開されません。 またHTMLタグは利用できません。
Name   E-mail   URL
Comment

About W.W.Walker

World Wide Walker は yoosee による blog です。PDA, Web・サーバ技術, 美味しい食べ物などの話題を取り上げています... read more

このエントリーのブックマーク

Monthly Archives

Select Month to read