vim でファイルを開くとシンタックスハイライトされないことがある。
現在、どの設定で開いているのか。
シンタックスハイライトは、vim の filetype 設定に依っている。
そこで、ファイルタイプを確認すると現在どのファイルタイプで開いているか確認できる。
:set filetype?
これでファイルタイプが確認できる。
ファイルタイプを修正する。
現在のファイルタイプを変更するには、次のようにする。
:set filetype=javascript
現在のシンタックス判定も確認。
syntax 設定は、filetypeに引きづられる。そのためfiletypeを優先してみておけばいいが、念のため確認しておく
:set syntax?
filetypeはそのままで、syntaxだけを変更しても目的は果たせそう。
シェルスクリプトで作ったnode.js 実行ファイルが正しく解釈されない。
普通は、拡張子などで判断される、だけれど判別がうまくいかない時がある。シェルスクリプトなど拡張子なしのコマンドを作った時だ、しかもシェル呼び出しは行数が少ないことがおおく中身からも判別が失敗しました。
判断がうまくいかないよくある例。
#!/usr/local/bin/node var url = require('url')
自動判定を追加する。
Vimのファイル・タイプの判断を自分で上書きすることが出来る。
ファイルの判定は、次の二箇所で主に行われる。 - ~/.vim/filetype.vim ファイル名でfiletypeの決定 - ~/.vim/scripts.vim ファイル内容でfiletypeの決定
~/.vim/ は :set runtimepath?
でPathを通している箇所。
ファイルの内容で、判別を書く
今回は、シェルスクリプトのShebang を元に判別したいので
~/.vim/scripts.vim
if did_filetype() finish endif if getline(1) =~ 'node' set filetype=javascript finish endif
このように書いた。 getline(1)
でshebang を取得して、node
が含まれていたら javascript とした。
これで、正しくファイルタイプが決定されシンタックスハイライトが決定された
無事ハイライトが自動で決まった。
拡張子の設定。
拡張子の設定は、次のコマンドで書き換えられる。
autocmd BufRead,BufNewFile *.erb set filetype=eruby.html
これは、~/.vim/filetype.vim や ~/.vimrc にでも書いておけば済みそうだ。
定義済みのシンタックスハイライト
定義済みのシンタックスハイライトは、Neobuldleなどでごちゃごちゃしてしまうが
mac のhomebrew でインストールした vim は /usr/local/share/vim に設定が作られるので、次の場所に存在した。
ls /usr/local/share/vim/vim74/syntax
まとめ
- filetype によって syntax が決まる。
- filetype は 拡張子から決まる。
- filetype は 中身からも決まる。
- .vim/scripts.vim でファイルの中身を判定するvimスクリプトが実行される
- とりあえず変えたい時
参考資料
http://qiita.com/okamos/items/8279154e20249247f78f