去る2010年4月。私の手元で燻ってた ambicmd.vim ってプラグインをとある経緯で gist に貼ったんだけど、その時は何人かでちょっとだけ触ってそのまま放置。
しかし私自身は今でもこのプラグイン使ってるし、埋もれたままなのももったいないので整理してちゃんと公開することにした。
https://github.com/thinca/vim-ambicmd
何をするプラグインか
長いコマンド名を個別の設定なしで入力するためのプラグインです。例えば vimrc には以下のように設定します。
cnoremap <expr> <Space> ambicmd#expand("\<Space>") cnoremap <expr> <CR> ambicmd#expand("\<CR>")
こうすると、<Space> や <CR> を押したときに直前のコマンドを特定のルールに従って展開しようとします。以下一例。
入力 | 展開結果(_はカーソル位置) |
---|---|
:ref<Space> | :Ref _ |
:qr<Space> | :QuickRun _ |
:ncc<Space> | :NeoComplCache_ |
:uni<Space> | :Unite_ |
:Unitew<Space> | :UniteWith_ |
:UniteWithid<Space> | :UniteWithInputDirectory _ |
これらはすでに定義されているユーザー定義コマンドから自動的に補完します。よって、各コマンド毎に特別な設定を行う必要がありません。
ただし、パターンから展開結果が一意に決定できる場合のみ展開されます。なので、展開しようとしたけどしてくれなかった!という残念なことも。
neocomplcache.vim や unite.vim の例は、「一意には決まらなかったけど候補が全部同じ文字列で始まっている場合」です。この場合その部分まで補完して、ついでに <C-d> で補完候補を表示します。
この展開ルールもうちょっといい感じにならないかなーとも思ってるので、いい案があれば是非教えてください。どういうことやってるかは help やソースコードを読んでもらえると。
ところでリリースする直前に、ambicmd.vim って名前実際には一意に決まらないと展開してくれないし shortcmd.vim の方が良かったんじゃないかとも思ったけど結局面倒なので変えなかった。どっちの方がいいですかね?