echodoc を使ってみて その2
echodoc を使ってみた - vim 初心者の作業メモ難点として、まだドキュメントがありません。
http://vim-users.jp/2010/12/hack189/
- 関数の I/F については, ドキュメント書いて pull req 送って取り込んでもらった. 英語がう○こだけど.
- 日本語マニュアルは取り込まれないと *思う* ので, ここで.
- 他の Shougo Ware のように更新が進むことはないと思われるので当分使えると思います.
- 最新版との差異があっても自己責任でお願いします.
- ドキュメント内の "思います" は syngan の感想文.
概要
echodoc はエコーエリアに情報を表示するプラグインです.
一定時間キー操作を行わなかった場合(autocmd CursorHold, CursorHoldI)にカーソル上にある文字列に対応する情報を表示します.
echodoc は以下の特徴を持ちます. 少なくともこれらの機能は ftplugin では実現できません.
インストール
NeoBundle (https://github.com/Shougo/neobundle.vim) を利用する場合には
.vimrc に以下のように記述してください.
NeoBundle 'Shougo/echodoc', '', 'default' call neobundle#config('echodoc', { \ 'lazy' : 1, \ 'autoload' : { \ 'insert' : 1, \ }})
注意: 本設定では挿入モードが開始したときに echodoc がロードされます.
insert (Number) If set to non-zero, neobundle will |:NeoBundleSource| on |InsertEnter| autocmd.https://github.com/Shougo/neobundle.vim/blob/436e4d4c5fff7023e95d93886724adfb690f3425/doc/neobundle.txt#L700
インターフェース:コマンド
:EchoDocEnable
echodoc を有効にします.
:EchoDocDisable
echodoc を無効にします.
インターフェース:変数
g:echodoc_enable_at_startup
本変数の値が 0 以外の場合には echodoc は起動時に自動的に有効になります.
デフォルト値は 0 (無効) です.
インターフェース:関数
echodoc#enable()
echodoc を有効にします. :EchoDocEnable の関数版です.
echodoc#disable()
echodoc を無効にします. :EchoDocDisable の関数版です.
echodoc#is_enabled()
echodoc が有効な場合に
echodoc#register({name}, {dict})
ドキュメント {dict} を {name} という名前で登録します.
もし同じ {name} のドキュメントが追加済みの場合には上書きされます.
{dict} は辞書型で以下を要素に持ちます:
- "name" 文字列型 (必須)
- このドキュメントの名前です. ユーザが任意に設定することができます.
- 引数の {name} と同じ値であることが要求されます.
- "rank" 数値型 (必須)
- このドキュメントの検索優先度です. この値が小さいほど優先度が高くなります.
- (注意: 1 を設定しておけば良いと思います.)
- "filetypes" 辞書型 (必須)
- このドキュメントを検索対象とする filetype を指定します. キー名が対象とするファイルタイプで
キー値は任意の値を設定します.
-
- (注意: 1 を設定しておけば良いと思います. プラグイン内では使用されていません)
- "search" 関数型 (必須)
- 検索に使用する関数を指定します. この関数はカーソル位置より前にある文字列(?) が cur_text を引数として渡されます.
- 復帰値は辞書型のリストです.
- 辞書は以下の要素を持ちます.
- "text" : 出力する文字列 (必須)
- "highlight" : 出力する文字列に対するハイライト (任意)
echodoc#unregister({name})
名前が {name} であるドキュメントの登録を解除します.
- (注意: echodoc#register の引数 {name} が対象ではないことに注意.)
echodoc#get({name})
名前が {name} である {dics} を返します. 登録されているか確認するのに利用できます.
例
対応している Shougo Ware
neocomplecache や neosnippet, vimshell を利用すると自動的に検索用のドキュメントが追加されます.
[ " neocomplcache {'rank': 5, 'name': 'include_complete', 'search': function('120'), 'filetypes': {}}, " neocomplcache {'rank': 10, 'name': 'vim_complete', 'search': function('144'), 'filetypes': {'vim': 1}}, " neosnippet {'rank': 100, 'name': 'neosnippet', 'search': function('102'), 'filetypes': {}}, {...} ]
register()
let s:sample_dict = { \ 'name' : 'sample', \ 'rank' : 1, \ 'filetypes' : {'text' : 1, 'vim' : 1}, \} function! s:sample_dict.search(cur_text) let completion_length = 4 let words = [] let i = 0 while i >= 0 let word = matchstr(a:cur_text, "[0-9a-zA-Z]\\+", i) call add(words, word) let i = matchend(a:cur_text, "[0-9a-zA-Z]\\+", i) endwhile if len(words) == 0 return [] endif for word in reverse(words) if len(word) >= completion_length break endif endfor return [ \ {'text' : word, 'highlight' : 'Identifier'}, \ {'text' : ' is found'}, \] endfunction call echodoc#register("sample", s:sample_dict)