Hatena::ブログ(Diary)

Alone Like a Rhinoceros Horn

2010-11-07

unite.vim で簡易アウトライン機能

ここでいう「アウトライン機能」とは、極々大雑把に、「ファイルの見出し一覧的なものを表示する機能」および、「見出し一覧から項目を選択することで該当個所へジャンプできる機能」、ぐらいの意味です。(世間一般において「アウトライン機能」といった場合にこれで通用するのかは自信がないので、そこは適当に)

ファイルタイプごとに設定されたパターンにもとづいて見出しを抽出し、それでファイルのアウトライン表示をやる機能を前々から欲しいと思っていて、はてさてプラグインを探そうか、それとも :grep でやろうか*1と思っていたところ、id:thincaさんによる以下のエントリがタイムリーヒット。

ここから簡易的なアウトライン機能までもう少しですよね。ここに、ファイルタイプごとに設定されたパターンにもとづく見出し行の抽出(フィルタ)を加えて候補を絞り込めば、unite のインターフェースを使って見出し一覧の表示と各見出しへのジャンプ機能が実現できてしまいます。

というか、やってみたらそれらしいものができたのでした↓

unite-outline

自分の vimrc で使ってみるとこんな感じ

f:id:h1mesuke:20110816233246p:image

なかなかいい感じ。

後は対応するファイルタイプを増やしていって、見出し抽出用のパターンをチューンしていけば、「アウトライン機能」としてちゃんと使える source にできそうではないですか。おおー。

source を書いて夢がひろがりんぐな unite面白いです。*2

スクリーンショット

対応ファイルタイプもちょっとずつ増えてきたので、見出し一覧のスクリーンショットをいろいろ掲載してみる。(2010-12-16)

C

f:id:h1mesuke:20111011140636p:image

C++

f:id:h1mesuke:20111011140634p:image

HTML

f:id:h1mesuke:20110816233728p:image

Java

f:id:h1mesuke:20110816233729p:image

JavaScript

f:id:h1mesuke:20111011140722p:image

Markdown

f:id:h1mesuke:20111011140721p:image


汎用のマークアップ言語としては Markdown の他に

  • reStructuredText
  • ReVIEW
  • Textile

にも対応している。

Perl

f:id:h1mesuke:20110816233730p:image

PHP

f:id:h1mesuke:20110816233731p:image

Python

f:id:h1mesuke:20110816233732p:image

Ruby

f:id:h1mesuke:20110816234413p:image

Shell script

f:id:h1mesuke:20111011140521p:image

Vim Help

f:id:h1mesuke:20111011140555p:image

Vim script

f:id:h1mesuke:20110816233246p:image

対応しているファイルタイプ一覧

後書き

unite.vim のヘルプを読んで source を自作できると知った多くの人(自分含め)が最初に作ろうとするのがこの見出し抽出タイプではないでしょうか。なので、似たような source を自分の vimrc に書いている人は多そうですね (^^;

追記

GitHubリポジトリを作ってみました。
ちょっとずつ対応ファイルタイプを充実させていく予定 (2010-11-08)

*1::grep を使って見出しを抽出して quickfix list でアウトラインを表示させている vimrc を最近見た。ほー、そんな使い方もあるんだなあと感心。

*2:名前に偽りなし。本当にいろんなプラグインに分散されていた機能を統合(unite)してしまって、一体いくつのプラグインをお払い箱にすれば気が済むのかという感じ。

ShougoShougo 2010/11/08 00:06 uniteの作者です。こんにちは。

outline sourceはかなりいい感じですね。是非ともリポジトリを作っちゃってください。
そうしたら、uniteのヘルプにリンクを貼ります。

let s:unite_source_outline_patternsのパターンについては、neocomplcacheのようにユーザー側で設定できると拡張しやすくて良いと思います。

> :grep を使って見出しを抽出して quickfix list でアウトラインを表示させている vimrc を最近見た。ほー、そんな使い方もあるんだなあと感心。
quickfix listもuniteで置き換えられますよね……。

> 名前に偽りなし。本当にいろんなプラグインに分散されていた機能を統合(unite)してしまって、一体いくつのプラグインをお払い箱にすれば気が済むのかという感じ。
元々それが目的です。ばらばらに開発されていたプラグイン達を統一したいのです。

h1mesukeh1mesuke 2010/11/08 00:40 コメントありがとうございます。

> outline sourceはかなりいい感じですね。是非ともリポジトリを作っちゃってください。
> そうしたら、uniteのヘルプにリンクを貼ります。

御意!