選択肢からコマンドを選んで実行する
Intro
新しいPluginを入れてもコマンドやキーバインドが覚えきれないので、
あらかじめ用意して選択肢から実行出来るようにする。
選択肢から実行するための関数として、inputlistがあるので使用する。(詳細は、:h inputlist)
Contents
.vimrcでも何処でも良いので以下を記載する。
let g:scc = {} " sample let g:scc.unite = [ \ ['Sample Uniteの選択リスト', ''], \ ['> File', 'Unite file'], \ ['> Find', 'Unite find'], \ ['> Dir', 'Unite direcotry']] function! SelectCmd(key) let a:viewlist = [] let a:idx = 0 let a:input = 0 let a:slist = g:scc[a:key] let a:head = '' while a:idx < len(a:slist) if a:idx == 0 call add(a:viewlist, a:slist[a:idx][0]) else execute 'let a:head = printf("[%-' . strlen(len(a:slist)) . 's]", a:idx)' call add(a:viewlist, a:head . ' ' . a:slist[a:idx][0]) endif let a:idx = a:idx + 1 endwhile let a:input = inputlist(a:viewlist) echo "\n" if a:input < 1 || a:input > len(a:slist) echohl ErrorMsg echo 'Selected-Number('.a:input.') is range over.(0-' . (len(a:slist) - 1) . ')' echohl None return endif echohl MoreMsg echo '> ' . a:slist[a:input][1] echohl None execute a:slist[a:input][1] endfunction command! -nargs=1 SelectCmd \ call SelectCmd(<q-args>)
実行する
:SelectCmd unite
自分で好きな選択肢を作りたい場合、下記形式で追加する
let g:scc.[任意のa-z,A-Z,0-9,_(アンダースコア)] = [ " 第1要素は、表示される文字列 " 第2要素は、選択時に実行されるコマンド(例> :ls, :h inputlist,など) " このサンプルだと> Fileを選択した場合、:Unite fileが実行される \ ['Sample Uniteの選択リスト', ''], " 説明文 \ ['> File', 'Unite file'], " 選択肢1 \ ['> Find', 'Unite find'], " 選択肢2 \ ['> Dir', 'Unite direcotry']] " 選択肢3 " 何個でも良い。
inputlistからinputlistを呼び出すことも出来る
" Sample let g:scc.unite = [ \ ['Sample Uniteの選択リスト', ''], \ ['> File', 'Unite file'], \ ['> Find', 'Unite find'], \ ['> Dir', 'Unite direcotry'], \ ['> SampleCmd MRUから選択', 'SelectCmd mru']] let g:scc.mru = [ \ ['Sample MRUの選択リスト', ''], \ ['> ファイルのMRU', 'MRUFile'], \ ['> フォルダのMRU', 'MRUDir'], \ ['> NetrwのMRU', 'MRUHistory']]