1 unite.vim Shougo ゆないと! ーすべてを破壊し、すべてを繋げー
May 24, 2015
1
unite.vim
Shougo
ゆないと!
ーすべてを破壊し、すべてを繋げー
2
自己紹介
ハンドルネーム:Shougo
Vim大好き
他の勉強会によく出没します
知っている人は知っている
Lingrによくいます
毎日Vim Scriptを書いています
戦闘力:数万
3
今までの(勉強会での)あらすじ
4
伝説のVim=VM
5
その内容
6
その結果
ごらんの有様だよ!
7
そして迎えたx86勉強会
8
その内容
注:イメージです
9
深まる誤解
またしても、ごらんの有様だよ!
10
lingrでのやりとりも……
11
変態じゃないよ!
「ボクはただ、Vim Scriptを書いていると何か興奮することに気付いただけなんだ。変態じゃないよ。仮に変態だとしても、変態という名の紳士だよ!」
12
今日はunite.vimの紹介をします
13
名前の由来
今までのインタフェースを「破壊」し、新たなインタフェースの元にすべてを「統一」する
ちなみに、某「仮面ライダー」とは何の関係もありません
おのれunite、貴様のせいでこのVimの世界も破壊されてしまった!
14
unite.vimとは?
Vim Scriptで実装されたanythingプラグイン
似たようなプラグインとして、ku.vimやfuzzyfinder.vim等がある
が、設計思想はかなり異なる
いつの日か、すべてを統一するプラグインになる(予定)
http://github.com/Shougo/unite.vim
15
unite.vimを作った理由
自分はVim信者なので、anything.elがVimにも欲しかった
しかし、fuzzyfinder.vim, ku.vimともに開発がストップする
sourceを統合できるku.vim Ver.0.3を元に、neouiを開発スタート
だが、ku.vimの中身はよく分からない
その上にInsert mode補完の限界が見えてくる
もう0から自作してしまおう!
16
anything.elの紹介
anything.elとは、「候補を選択しアクションを実行する」という操作を汎用的に実行するプラグイン
イメージとしてはファイラーに近いが、操作するものはファイルに限定されない
候補を収集する「source」と呼ばれるものを追加することで、何でもanything化することができる
もっと詳しい解説は、
会場にいるEmacs使いに聞こう!
17
anything.elの使用例
このように、「バッファ」「ファイル」「最近使用したファイル」を統合し、一度に検索することができる。
18
簡単な使い方
~/.vimにunite.vimの配布ファイルをインストールする
Vimを立ち上げる
:Unite buffer file file_mruを実行する
普通に使うときは専用のキーマッピングを定義する
もっと詳しい解説は:help uniteで
19
unite.vimの優位性
Insert mode / Normal modeのどちらでも使える
よりVimとの親和性の高いanythingを実現
開発が盛ん
比較的簡単にsourceを追加可能
候補をマークしてアクションの実行ができる
ワイルドカードの実装
スペース区切りによる絞り込み
20
注意!
これからはunite.vimの思想や内部構造についての話をします
しかし、unite.vimはまだ開発中なので、これらの機能は実装されていない可能性があります
実装されていなくても泣かない
unite.vimを使うときは、部屋を明るくしてモニターから30cmほど離れてください
21
unite.vimの設計思想
Insert modeに入って絞り込み、Normal modeで実行やactionの選択を行う
ku.vim, fuzzyfinder.vimのように、Vim組み込みの補完リストは使用しない
action, sourceは自由に追加・カスタマイズが可能
sourceにはパラメータを渡せないので、:FufFile pathみたいなことはできない
曖昧マッチはできない。パフォーマンスの影響があるため。
sortはsourceを指定した順番で行われる。同一sourceの順序づけはsource内で行う。この仕様はanything.elと同一。
ワイルドカードはあるが、正規表現で検索はしない。メタキャラクタによるマッチは邪魔である。
22
kind
buffer, file, directoryのように、候補の型による共通の操作をまとめたもの
標準のもの以外にも、ユーザーやsourceで自由に追加可能
kindがそれぞれのactionを定義している(source側で上書きも可能)
ku.vimではsouceがkindを持っているが、unite.vimではkindを持つのは候補(candidates)側である
ディレクトリだったら絞り込み、といった設定が容易にできる
ちなみに、anything.elではtypeと呼ぶ
kindはku.vimの用語
23
source
anything.elでは情報源とも呼ぶ
候補(candidates)をいろいろなところから収集するルーチンのこと
sourceがなければunite.vimはゴミ
現在はbuffer, file, file_mru, register, bookmarkが実装されているが、ユーザーも自由にsourceを追加できる
bufferはバッファリストからバッファの候補を収集する
fileはglob()を使ってファイルの候補を収集する
file_mruはautocmdを使って開いたファイルを記録し、候補とする
registerはレジスタの値を候補とする
bookmarkはブックマークしたファイル・ディレクトリを候補とする
24
action
選択した候補に対して行う操作のこと
<Enter>を押したときにはデフォルトのactionが実行される
<Tab>を押すと、そのほかのアクションも実行できる
複数選択可能にしたり、実行後すぐ終了したりといったフラグを持たせることができる
例えば、openやdeleteといったactionは複数選択可能になっている
25
ちなみに……
ku.vimにあったkey_tableは存在しない
アクションの選択では先頭マッチによる省略と補完ができる
例:openならばoと省略ができる。
ただし、他にoで始まる候補がない場合のみ。
当初はNormal modeを主力とする予定だったが、ku.vim, fuzzyfinder.vimに慣れていたユーザーの意見により、Insert modeでもそれなりの処理ができるようになった
26
ちなみに……
Normal modeが主軸なので、キーマッピングは自由自在
候補のマークなど、vimfilerの影響もかなり受けている
ぶっちゃけると、いつかanything.elすら越えて、独自の進化をしたい
参考:vimfiler
27
今後のunite.vim
そろそろsourceの仕様を固める
ユーザーがカスタマイズ可能にする
ヘルプの更なる充実
neocomplcacheの補完もunite.vimに統合
helpやタグから検索してジャンプ
fuzzyfinder.vimの機能の取り込み
28
まとめ
anythingインタフェースはもはやEmacsユーザーの専売特許ではありません!
みなさんもunite.vimを活用して、快適な生活を送りましょう
29
おまけ
anything.elを勉強するには、「Emacsテクニックバイブル」がおすすめ!
この本を読んで、Vimの戦闘力を向上させましょう
30
ご静聴ありがとうございました
僕もまた―――
Vimというエディタに踊らされただけの
犠牲者の一人に過ぎないってことさ―――