Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

HiveQLでneocomplete.vimのシンタックス補完を使う

$
0
0

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にしないとシンタックス補完が効かない…。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>