cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

alti.vim のアイデンティティを作者である私が失いかけたので整理しておく

alti.vimctrlp.vim を参考にして作られたため、インターフェイスは ctrlp.vim に似ている。

ctrlp.vim は複数の選択肢の中から1つを選んで開くためのインターフェイスであり、ファイルやバッファを絞り込んで開くという使い方をされる。

この系統のプラグインは昔からあり、

もこの系統である。

インターフェイスについてだが
選択肢は
fuf と ku はポップアップ補完を、
unite と ctrlp はバッファを利用している。

そして入力済みの絞り込み文字列には、
fuf ku unite はバッファを
ctrlp は :echo コマンドを利用している。

見た目のクールさで言うと、バッファを1〜2行だけ上部に表示するポップアップ補完式が unite方式よりも優れている。
unite ctrlp はバッファを大きく開くのでその間は他のバッファが隠れてしまう。

ポップアップ補完式の難点は、キーカスタマイズが出来ないこと、インサートモードでしか動かないこと。
そしてユーザの操作の制限がほとんどできないことだろう。
割り切ればいいことなのだろうが、
unite はユーザのバッファへの変更や、その他の動作について厳しく制限している。
ctrlp はユーザのキーマッピングを奪うことでユーザの操作を制限している。


そして私は ctrlp.vimインターフェイスを採用した。
これは当時 unite のインターフェイスに不満を持っていたことと、mattnがctrlpのインターフェイスをベタ褒めしていたことが大きい。
その当時はfuf や ku を試していなかったので、ポップアップ補完式について全く検討外だったのだが、
alti.vim の用途を考えると、ポップアップ式の補完の方が適切だったのでないかと今思われる。


alti は ctrlp のインターフェイスに類似しているが、その役割はコマンドラインである。
fuf ku unite ctrlp では主の役割である選択肢は alti では従、
fuf ku unite ctrlp では従の役割である入力済み文字列は alti では主と、
主従関係が逆転している。
altiにとって選択肢候補は入力を作るための補助要素に過ぎない。
作っている入力文字列の方がメインであり、突き詰めて言えば、選択肢候補にない勝手な文字列を入力して実行するということもあり得る(fuf ku unite ctrlp ではマッチする候補がないとしてエラーが出るだろう)。
そして、入力文字列の方がメインであり、表示される候補は完成されるであろう全体形の部分である。
入力文字列が文脈を作り、候補はその時々の文脈に応じて生成される。

その点が初めから選択肢があって、入力によって絞り込まれていくfuf ku unite ctrlp とは違う。
alti の入力は選択肢を減らすどころか増やすこともあるし、全く別の選択肢に置き換えてしまうこともある。


こういう原点を、改造している内にすっかり忘れてしまっていた。
unite みたいに選択肢自体に何かしたいなとか、複数選択したいなとか思うようになっていた。
いつの間にか選択肢の方がメインみたいに錯覚していた。
理念がブレ始めていた。
複数選択をするのなら、コマンドラインで入力する時みたいに、複数入力すればいいのだった。
Enter キーを押したとき、実行されるのは選択中の候補ではなく、入力された文字列だってことを忘れていた。
いかんいかん。


ちなみに kamichidu/vim-milqi なんてものが作られているのですが、これは ctrlp と alti 両方の機能を持つコンセプトらしいです。