Hive用のsyntaxファイルがautowitch/hive.vimにあるけど、
そこに書いてあるように
" for .hql filesauBufNewFile,BufRead *.hql setfiletype=hive expandtab" for .q filesauBufNewFile,BufRead *.qsetfiletype=hive expandtab
設定をすると、neocomplete.vimのsyntax補完がでてこない。
neocomplete.vimのソースを調べてみると、neocomplete.vim/syntax.vimの145-150行目に
if line =~'Syntax items'|| line =~'^\s*links to'||
\ line =~'^\s*nextgroup='||
\ stridx(tolower(group_name), filetype_pattern)!=0 " Next line.
continue
endif
という記述があり、上の3行目で、シンタックスグループ名がファイルタイプでは始まらないものは、キーワードを抽出していない事がわかる。
hive.vimのシンタックスファイルを見るとsqlで始まっているため、ファイルタイプをhiveにしてしまうとシンタックス補完ができない。
一方、sqlのシンタックスファイルを見てみると
$VIMRUNTIME/syntax/sql.vim
" Default to the standard Vim distribution fileletfilename='sqloracle'" Check for overrides. Buffer variables have the highest priority.if exists("b:sql_type_override") " Check the runtimepath to see if the file existsif globpath(&runtimepath,'syntax/'.b:sql_type_override.'.vim')!=''letfilename=b:sql_type_override
endifelseif exists("g:sql_type_default")if globpath(&runtimepath,'syntax/'.g:sql_type_default.'.vim')!=''letfilename=g:sql_type_default
endifendif" Source the appropriate file
exec 'runtime syntax/'.filename.'.vim'
b:sql_type_override
またはg:sql_type_default
にsqlのタイプが設定されていると、そのシンタックスファイルを読み込むことがわかるので、
vimrc
NeoBundleLazy 'autowitch/hive.vim', {
\ 'autoload': {'filetypes': ['sql']}
\}
::
augroup MyVimrc
autocmd!
augroup END
autocmd MyVimrc BufNewFile,BufRead *.hql,*.q
\ letb:sql_type_overrride ='hive'
\|setlocalfiletype=sql
こんな風にSQLのタイプを設定してから、ファイルタイプを設定すると、hiveのシンタックスファイルが読み込まれ、シンタックス補完も効くようになる。
ちなみにmysqlのシンタックスファイルを見てみると、こちらはmysqlでシンタックスグループが始まっているので、ファイルタイプをmysqlにしないとシンタックス補完が効かない…。