emacs でのソースコードの折り畳み表示
Posted by yoosee on Debian at 2007-01-30 22:00 JST1 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 は便利なので常用することになりそう。