Hello Geek!
やあ、パソコンカタカタオタクの諸君!
今日もクールなTerminalでエキゾチックなVimをさわっているかい?
ところで君はどんなVimのcolorschemeを使っているだろう。
安定のGruvbox?
伝統のMolokai?
流行りのHybrid?
柔軟なBase16シリーズもいいよね。
それとも僕と同じ古き良きjellybeansかな?
しかし、君はまだ知らないだろう。
そのVimのcolorschemeがまだ輝けるということを
VimのSyntax Highlightingは不完全
VimのSyntax HighlightingはもともとIDEと比べると完璧とは言い難い。
文法が複雑な言語で複雑な処理を書くと、その差ははっきり現れてくる。
PhotonのPythonのコードをVimとVSCodeで見比べてみよう。
1枚目がVim、2枚目がVSCodeで開いたファイルだ。
colorschemeはどちらも同じjellybeans。
VSCodeは引数やネスト内の関数がハイライトされているのに、Vimでは白い文字のままだ。
これはjellybeansに限らず、どのcolorschemeでも同じようにハイライトされない処理が存在する。
このようにVimのSyntaxの解析には限界がある。
しかし、だからと言ってその程度の理由でIDEに戻るわけにはいかない。
でも綺麗なThemeで開発したい...
今日はそんな君の悩みを解決しよう!
nvim-treesitter
https://github.com/nvim-treesitter/nvim-treesitter
nvim-treesitterはtree-sitterという構文解析ツールを導入したNeovimのプラグインだ。
このプラグインを導入することで、defaultのVimではできなかった複雑なSyntaxも判別できるようになる。
以下がプラグイン適用前と適用後の違いだ。
左が素のVimで右がtreesitterを適用したNeovimだ。
先ほどはハイライトされなかった引数やネストされた関数たちがちゃんとハイライトされている。
もう少しわかりやすい例で見てみよう。
次はOpenCVのC++のコードだ。
引数、モジュール名、関数、標準ライブラリ、enum...、全てがハイライトされている。
これこそが僕らが本当に見たかったcolorschemeではないだろうか。
Installation
Neovim-nightly
nvim-treesitter
を使うにはNeovimのdeveloper versionのNeovim-nightlyが必要になる。
macOSであればbrewでinstallできる
(公式のインストール方法にしたがって、実行ファイルをダウンロードするもよし)
$ brew upgrade neovim
$ brew install --HEAD neovim
Linuxであればリリースページから実行ファイルをダウンロードして、任意のパスに設定する。
$ curl -L https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage -o /tmp/nvim-nightly;
$ chmod +x /tmp/nvim-nightly;
$ sudo mv /tmp/nvim-nightly /usr/local/bin;
インストールできたらdeveloper versionか確認。
$ nvim -v
NVIM v0.5.0-dev+919-g08ec36efa
Build type: Release
nvim-treesitter
nvim-treesitter
はお好みのプラグインマネージャーなりでインストール
↓Plugの場合
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
init.vim
にtreesitterの設定をluaのコードで書く。
" treesitter
lua <<EOF
require'nvim-treesitter.configs'.setup {
ensure_installed = "maintained", -- one of "all", "maintained" (parsers with maintainers), or a list of languages
highlight = {
enable = true, -- false will disable the whole extension
disable = { "vue", "ruby" }, -- list of language that will be disabled
},
}
EOF
これであとは init.vim
を更新すれば美しいcolorschemeを拝めることができる。
よいVimライフを!
補足
nvim-treesitter
の完全適応には、colorscheme側もtreesitter
へのサポートが必要だとコメントいただいた。
非サポートな普通のcolorscheme
でも今まで以上にハイライトされるが、完全な解析に則ったものではないらしい。
https://github.com/rockerBOO/awesome-neovim#treesitter-support
Treesitter is a new system coming in Neovim 0.5 that incrementally parses your code into a tree that works, even with errors in your syntax. These colorschemes have specifically set colors for treesitter highlight groups. Vim colorschemes will work with the new groups out of the box.