unite.vim について語る
この記事は Vim Advent Calendar 2012 97日目の記事になります。
記念すべき 100日目まであとすこし!!って事で今回は unite.vim について書いてみました。
unite.vim とはなんぞや。
という人は結構いると思うので主観バリバリですが unite.vim について説明してみたいと思います。
また untie.vim に関しては 92日目に syui さんも記事を書いているのでそちらも合わせて読んでみるといいと思います。
[unite.vim とは]
unite.vim とは Shougo 氏が作成された Vim プラグインです。
そもそも 「unite.vim とはなんぞや」という話ですが、一言で言ってしまえば
『Vim 上で使用出来る統合ユーザインターフェース』
になります。
もっと噛み砕いて言えば、
絞り込みやファイルの開き方を指定できるすごい quickfix
というとわかりやすいかも知れません。
unite.vim を使用することによって様々なデータを『unite』という統合されたインターフェースで操作することが出来ます。
よく目にする unite-buffer や unite-file みたいな unite-○○○は unite.vim で buffer や file、○○○を操作する、というイメージを持ってもらうとわかりやすいかと思います。
これにより他のプラグインを作成する場合、unite-source と呼ばれる unite.vim の拡張プラグインを提供すれば unite という統合されたインターフェースでそのプラグインの操作を行うことが出来ます。
ユーザ側は unite.vim の操作方法さえ理解していれば簡単にプラグインを扱うことができ、またプラグイン側もインターフェースを提供する手間を省く事が出来ます。
ともあれ、文章だけではちょっと想像しづらいと思うので実際に使ってみましょう。
ちなみに unite は「ゆないと」と読みます。「うにーと」ではありません。ありません。
[インストール]
unite.vim は github で公開されておりそこから取得する事が出来ます。
Vim でプラグインを使用する場合、いくつか手段があります。
git が導入されていれば、neobundle.vim を使用するのがいいと思います。
neobundle.vim でのプラグインの導入方法は下記を参照してみて下さい。
他には vim-pathogen が git が必要なく、比較的簡単にしようできるかと思います。
[使ってみる]
unite.vim は :Unite コマンドに unite-source 名(buffer や file 等)を渡して起動します。
unite-source とは unite-buffer や unite-file などの事を指します。
試しに unite-file を使用してみたいと思います。
:Unite file
を実行するとカレントディレクトリのファイルとディレクトリの一覧を出力します。
この時に insert モードに入ることで候補の絞り込みを行うテキストを入力する事が出来ます。
そして候補を選択し実行(
これが unite.vim の基本的な動作になります。
大まかな流れは
- :Unite {source 名} で unite を起動する
- 必要であれば絞り込みを行う
- 目的の候補を選択し、実行する
というような感じです。
他にも :Unite buffer でバッファの一覧を出力したり、:Unite file_mru で最近開いたファイルの一覧を出力したり出来ます。
unite.vim で使用する事ができる unite-source の一覧は、
:Unite source
で unite.vim に出力されます。
選択すればその unite-source を実行するのでいくつか試してみるといいと思います。
現在 unite.vim がデフォルトで組み込んでいる unite-source は以下になります。
[unite.vim が定義している unite-source 一覧]
source 名 | 内容 |
---|---|
file | カレントディレクトリのファイルとディレクトリ一覧 |
file/new | ファイルの新規作成 |
file_mru | 最近開いたファイルの一覧 |
file_rec | カレントディレクトリの全てのファイルの一覧 |
file_rec/async | file_rec の非同期処理版 |
directory | カレントディレクトリのディレクトリ一覧 |
directory/new | ディレクトリの新規作成 |
directory_mru | 最近開いたディレクトリの一覧 |
buffer | 開かれているバッファの一覧 |
buffer_tab | 現在のタブで開かれたバッファの一覧 |
tab | タブの一覧 |
register | レジスタの一覧 |
bookmark | ブックマークの一覧 |
source | unite-source の一覧 |
window | 現在のタブのウィンドウの一覧 |
output | Vim のコマンドの出力結果を出力する(e.g. :mes) |
command | 定義されているコマンドの一覧 |
function | Vim の組み込み関数と unite.vim、neocomplcache で定義されている関数の一覧 |
mapping | 定義されているキーマッピングの一覧 |
grep | 外部コマンド "grep" の結果を出力 |
vimgrep | :vimgrep の結果を出力 |
find | 外部コマンド "find" の結果を出力 |
line | 現在のバッファの行を出力 |
line/fast | 10000行以上のバッファ時に使用する line |
jump | :jump の結果の出力 |
change | :change の結果を出力 |
jump_point | file:line に一致するデータを出力 |
file_point | ファイル名か URI に一致するデータを出力する |
launcher | $PATH にある実行ファイルの一覧 |
alias | g:unite_source_alias_aliases の一覧 |
menu | g:unite_source_menu_menus に登録されてあるメニューの一覧 |
history/yank | ヤンクされたワードの一覧 |
process | 起動しているプロセスの一覧 |
runtimepath | runtimepath に追加されているパスの一覧 |
詳しくは、
:help unite-source-file
を参照して下さい。
上記以外にも様々なユーザが独自に unite-source を作成し、プラグインとして提供しています。
unite.vim の組み込み以外の unite-source に関しては下記のサイトが参考になると思います。
[アクションについて理解する]
unite.vim の強力な機能の一つに『アクション』という概念があります。
これは『選択している候補に対してどのような処理を行うか』というものになります。
先ほど紹介した unite-file では『ファイルを開く』がアクションに該当します。
試しに unite-file を起動して、候補を選択し、
これは Windows でいうところの右クリックメニューのようなイメージをしてもらうとわかりやすいかと思います。
この一覧にあるアクションを実行すると選択している候補に対してその処理が行われます。
例えば『新しいタブでファイルを開きたい』のであれば『tabopen』を選択することでそれを実現する事が出来ます。
また :Unite コマンドにオプションを渡すことで候補を実行した時のデフォルトのアクションを設定することも出来ます。
" 候補を実行したら新しいタブでファイルを開きたい :Unite file -default-action=tabopen
このように unite.vim では『選択した候補』に対して『どのような処理を行うのか』を柔軟に処理する事が出来ます。
これさえ覚えてしまえばある程度は unite.vim を使いこなすことが出来ると思います。
また、:Unite のコマンドオプションは色々と用意されているのでひと通り目を通しておくといいと思います。
:help unite-options
[最近開いたファイルを開く]
Vim の起動後に『前回編集していたファイルを開きたい』と思うことがあると思います。
その場合は unite-file_mru を使用する事で『最近開いたファイルの一覧』を unite.vim へ出力することが出来ます。
:Unite file_mru
これだけでも便利なのですが、次のように Vim の起動時に -C オプションを設定することで Vim を起動した直後に自動的に『最近開いたファイル』の一覧を出力する事が出来ます。
$ gvim.exe -c ":Unite file_mru"
これでスムーズにファイルの編集を再開することができます。
[Vim コマンドの結果を unite.vim へ出力する]
例えば :message や :version といったコマンドの結果を参照したい場合があるかと思います。
直接コマンドを呼び出してもいいのですが unite-output を使用することでコマンドの実行結果を unite.vim へと出力することが出来ます。
" 指定したコマンドの実行結果を unite.vim へ出力する " :Unite output:{コマンド名} " :message の結果を unite.vim へ出力 :Unite output:message " :version の結果を unite.vim へ出力 :Unite output:version
[定義されているキーマッピングを調べる]
unite-mapping は設定されているキーマッピングの一覧を出力します。
これを利用して特定のキーを使用しているキーマッピングを絞り込んで確認したりする事が出来ます。
また、unite-mapping では normal のマッピングしか出力しませんが、次のように unite-output を使用することで全てのマッピングを出力することが出来ます。
:Unite output:map|map!|lmap
unite-output の汎用性が高いことが分かりますね。
[unite-line でバッファ内を検索する]
unite-line を利用してバッファ内のワードを検索する事が出来ます。
unite.vim の help では次のようなマッピングが例として上げれられています。
nnoremap <silent> / :<C-u>Unite -buffer-name=search line/fast -start-insert -no-quit<CR>
上記の設定は unite-line/fast を利用した検索のキーマッピングになります。
上記の設定では / で unite-line/fast が起動し、即絞り込みの入力になります。
また、候補を選択しても unite.vim が閉じずにカーソルが候補の位置へとジャンプします。
unite.vim ではこういった挙動も制御する事ができます。
[よく使うコマンドの一覧をつくる]
g:unite_source_menu_menus に予めコマンドのリストを登録しておけば、unite-menu からそのコマンドの一覧を出力し、実行する事が出来ます。
よく使用するコマンドやファイルなどを登録しておけばスマートに呼び出し実行することが出来ます。
" 例 let g:unite_source_menu_menus = { \ "shortcut" : { \ "description" : "sample unite-menu", \ "command_candidates" : [ \ ["edit vimrc", "edit $MYVIMRC"], \ ["edit gvimrc", "edit $MYGVIMRC"], \ ["unite-file_mru", "Unite file_mru"], \ ["Unite Beautiful Attack", "Unite -auto-preview colorscheme"], \ ["unite-output:message", "Unite output:message"], \ ], \ }, \} " 呼び出しコマンド " :Unite menu:shortcut
[grep する]
unite-grep や unite-vimgrep を使用する事で grep した結果が unite.vim へと出力されます。
vimgrep は quickfix へと出力されますが、quickfix と比べて unite.vim へと出力する事で次のような利点があります。
- 検索結果を絞込みできる
- ファイルの開き方を指定できる
- 自動プレビューできる
unite.vim だと痒いところに手が届きますね。
[選択したファイルを grep する]
grep はアクションとしても用意されており、選択している候補、もしくは
例えば、unite-file_mru と grep アクションを組み合わせれば『最近開いたファイルで grep する』というようなことが簡単に行うことが出来ます。
こういう風な自由な組み合わせが出来るところも unite.vim の利点ですね。
[FizzBuzz の出力]
unite-output の応用として次のようなコマンドで FizzBuzz の結果を unite.vim へと出力する事ができます。
:Unite output:for\ i\ in\ range(1,1000)|echo\ i.'\:'.(i%15==0?"FizzBuzz"\:i%3==0?"Fizz"\:i%5==0?"Buzz"\:i)|endfor
unite-output 超便利ですね!!
[colorscheme をプレビューしながら確認する]
unite-colorscheme を使用する事で unite.vim で colorscheme を設定することが出来ます。
unite-colorscheme は unite.vim の組み込み source ではないので別途導入する必要があります。
導入方法は普通のプラグインと変わりありません。
これは次のようなコマンドオプションを追加する事でプレビューしながら colorscheme を設定する事が出来ます。
:Unite colorscheme -auto-preview
これが俗にいうユナイトビューティフルアタック!!になります。
乱用すると目がやられるので注意して下さい。
[まとめ]
全ての操作は unite.vim というインターフェースに乗っかっています。
例えばプラグインを管理するプラグインであればプラグインの一覧を、メモを管理するプラグインであればメモの一覧を unite.vim へと出力すれば統一された操作でプラグインを使用することが出来ます。
これは様々なデータを扱う上でとても大きな利点だと思います。
と、いう感じで簡単にですが unite.vim について書いてみました。
これで unite.vim の良さについて少しでも分かってもらえればいいと思います。
また unite.vim はとても拡張しやすいつくりになっておりユーザ側で独自に unite-source やアクションなどを定義することが出来ます。
何か unite.vim で操作したいような動作が出てきた場合は自分で unite-source を作成してみるのもいいかと思います。
他にも何か書きたいことがあった気がしますがそろそろ限界なのでこの辺で止めておきます。
normal モード
キー | 動作 |
---|---|
i | 絞り込みのテキストを入力する |
I | 絞り込みのテキストを入力する |
a | 候補が選択されていればアクションの一覧を表示する |
されていなければ絞り込みのテキストを入力する | |
A | 絞り込みのテキストを入力する |
q | unite を閉じる |
Q | unite を全て閉じる |
unite を再起動する | |
候補のマーク、解除する | |
* | 全部の候補を選択する |
M | 全部の候補を表示するかしないかのトグル |
カーソル下の候補に対するアクションを選択、実行する | |
(help みてもよく分からなかった…) | |
(help みてもよく分からなかった…) | |
カーソル下の候補の情報をコマンドラインに出力する | |
unite を再描画する | |
絞り込みのテキストを削除する | |
gg | バッファの先頭へ移動 |
G | バッファの末尾へ移動 |
j | 下へ移動 |
下へ移動 | |
k | 上へ移動 |
上へ移動 | |
J | (help みてもよく分からなかった…) |
K | (help みてもよく分からなかった…) |
? | unite のマッピングを出力 |
選択されている候補に対して default アクションを実行する | |
d | 候補が選択されていれば delete アクションを実行する |
e | 候補が選択されていれば narrow アクションを実行する |
t | 候補が選択されていれば tabopen アクションを実行する |
x | 候補が選択されていれば候補へのジャンプし、default 実行する |
. | 絞り込みに . を設定する |
insert モード
キー | 動作 |
---|---|
テキストの挿入を抜ける | |
アクションの一覧を表示する | |
下へ移動 | |
下へ移動 | |
上へ移動 | |
上へ移動 | |
次の頁を移動する | |
前の頁を移動する | |
選択されている候補に対して default アクションを実行する | |
絞り込みのテキストを1文字削除する | |
絞り込みのテキストを1文字削除する | |
絞り込みのテキストを全て字削除する | |
絞り込みのテキストの単語を削除する | |
先頭へ移動する | |
先頭へ移動する | |
unite を再描画する | |
unite を閉じる | |
d | 候補が選択されていれば delete アクションを実行する |
b | 候補が選択されていれば bookmark アクションを実行する |
e | 候補が選択されていれば narrow アクションを実行する |
t | 候補が選択されていれば tabopen アクションを実行する |
yy | 候補が選択されていれば yank アクションを実行する |
p | 選択されている候補に対して preview アクションを実行する |
候補のマーク、解除する | |
x | 候補へのジャンプし、default アクション実行する |
visual モード
キー | 動作 |
---|---|
選択されている候補のマークを指定、解除する |