Vimでファイルタイプを手動指定してハイライトを適用する
保存前の無題バッファにコードを書いていると、シンタックスハイライトがまったく効かず読みにくくなります。拡張子で自動判定される仕組みなので、まだファイル名が無い状態では判定のしようがないのは当然ですが、それでも手動で指定すれば解決できます。
目次(8項目)
| コマンド | これだけ覚える |
|---|---|
:set filetype=xxx / :set ft=xxx | 言語を手動指定してハイライトを適用 |
:set filetype? | 現在の判定を確認 |
:syntax on / :set syntax=xxx | 色付けだけを変更(インデント等には影響しない) |
autocmd ... setfiletype xxx | 特定の拡張子・パスを自動判定 |
ファイルタイプを指定する
:set filetype=markdown
:set ft=markdown " 省略形
言語名を指定するだけで、その言語用のシンタックスハイライトやインデントルールが即座に適用されます。保存前のメモ書きにMarkdownやコードのハイライトを効かせたいときに便利です。
自動判定が誤っているとき
拡張子から自動判定されるfiletypeが、内容と合っていないことがあります。テンプレートファイルや複数の言語が混在するファイルでは、判定がずれやすくなります。そんなときも同じコマンドで正しい言語を指定し直せます。
現在のfiletypeを確認する
:set filetype?
今どの言語として認識されているかを確認したいときは、末尾に?を付けて実行します。ハイライトの効き方がおかしいと感じたら、まずこれで現在の判定を確認すると安心です。
filetypeとsyntaxの違い
紛らわしい2つのオプションですが、制御する範囲がそもそも違います。
filetype | syntax | |
|---|---|---|
| 制御する範囲 | インデント・折りたたみ・プラグインの挙動を含む「言語としての扱い」全体 | 色付け(ハイライト)だけ |
| 確認 | :set filetype? |
:set syntax? |
| 変更 | :set filetype=xxx |
:set syntax=xxx |
色だけを変えたいなら:syntax onや:set syntax=で足りる場面もありますが、インデントや折りたたみまで言語らしく振る舞わせたいならfiletype側を設定する必要があります。
自動判定の仕組みを補強する
特定の拡張子が毎回誤判定される場合は、autocmdでルールを追加しておけます。
autocmd BufNewFile,BufRead *.conf setfiletype dosini
頻繁に手動指定し直す羽目になるファイルパターンがあるなら、このように設定ファイルに書いておいたほうが毎回のコマンド入力を省けます。
:set filetype=で言語を明示的に指定します。頻発するパターンはautocmdで自動化しておくと手間が減ります。
保存前のメモにJSONを書き殴っているとき、ハイライトが効かず構文ミスに気づけないことがよくありました。:set ft=jsonを打つ癖をつけてからは、保存前でも構文エラーに気づきやすくなり、無駄な手戻りが減りました。テンプレートファイルで拡張子と中身の言語が一致しないケースでも、この一手間で快適に編集できるようになりました。
プラグインとの連携
LSPやシンタックスチェッカーの多くはfiletypeの値を見て、どの言語サーバーやチェッカーを起動するかを判断しています。誤判定のまま作業していると、これらのツールも正しく機能しません。ハイライトが効かないだけでなく補完や診断まで動かないと感じたら、まず:set filetype?で言語判定を疑うのが近道です。
まとめ
:set filetype=は、自動判定に頼れない場面での頼れる保険になります。頻発するならautocmdで自動化するとさらに快適です。