macでは普通に動いていたuniteが、何故かcentosで以下のようなエラーをはいた
エラー内容
Error detected while processing function <SNR>28_call_unite_empty..unite#start..unite#start#standard..unite#view#_init_cursor..unite#view#_set_cursor_line..unite#view#_match_line:
line 2:
E117: Unknown function: matchaddpos
E15: Invalid expression: has('patch7.4.340') ? matchaddpos(a:highlight, [a:line], 10, a:id) : matchadd(a:highlight, '^\%'.a:line.'l.*', 10, a:id)
vimのバージョンは7.2
vimバージョン
[vagrant@vagrant-centos65 ~]$ vim --version
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr 5 2012 10:17:30)
該当箇所のソースはエラーメッセージに有る通り。
該当箇所
function! unite#view#_match_line(highlight, line, id) "{{{
return has('patch7.4.340') ?
\ matchaddpos(a:highlight, [a:line], 10, a:id) :
\ matchadd(a:highlight, '^\%'.a:line.'l.*', 10, a:id)
endfunction"}}}
何故かは分からないが、has('patch7.4.340')がtrueになっているらしい。
それでmatchaddposを使おうとしたけど見つからなくてエラーという感じだろうか。
helpを見た所、patchチェックはバージョンチェックも一緒にやったほうがいいらしい。
Help
3. Included patches. First check |v:version| for the version of Vim.
Then the "patch123" feature means that patch 123 has been included for
this version. Example (checking version 6.2.148 or later): >
:if v:version > 602 || v:version == 602 && has("patch148")
というわけで、以下の用に書き直したらエラーが消えました。
該当箇所
function! unite#view#_match_line(highlight, line, id) "{{{
return (v:version >= 704 && has('patch7.4.340')) ?
\ matchaddpos(a:highlight, [a:line], 10, a:id) :
\ matchadd(a:highlight, '^\%'.a:line.'l.*', 10, a:id)
endfunction"}}}
パッチを当てて動作確認してないので、これで正しいかは分かりませんが、とりあえず動いたので満足です。