ctrlp.vimのExtensionを書くときに:NeoBundleLazy autoloadを考慮してg:ctrlp_builtinsをそのまま使わない
ctrlp拡張を作ったら、最後にctrlpからid番号を取得してctrlpに登録することになるが、
このとき、ctrlpがNeoBundleLazy状態であるのなら、
command! CtrlPExtension call ctrlp#init(ctrlp#{extension-name}#id())
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars) function! ctrlp#{extension-name}#id() return s:id endfunction
は、g:ctrlp_builtins
が定義されていないためにエラーが出る。
ctrlp.vimはctrlp#init()
が呼び出されたときに初めてneobundle.vimによって読み込まれるために、それ以前にはg:ctrlp_builtins
が定義されていないからである。
エラーが出ないようにするためには、たとえば以下のように書き改める。
let s:id = ctrlp#getvar('g:ctrlp_builtins') + len(g:ctrlp_ext_vars) function! ctrlp#{extension-name}#id() return s:id endfunction
ctrlpの変数の値を返すctrlp#getvar()が呼ばれたときに、neobundle.vimがctrlp.vimを読み込むようになるために、エラーが出なくなる。
ctrlpのExtensionの作り方は以下の記事に詳しい。