183
152

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vim 2Advent Calendar 2020

Day 17

君はまだVimの真の美しさを知らない

Last updated at Posted at 2020-12-16

Hello Geek!

やあ、パソコンカタカタオタクの諸君!

今日もクールなTerminalでエキゾチックなVimをさわっているかい?

ところで君はどんなVimのcolorschemeを使っているだろう。

安定のGruvbox?

伝統のMolokai?

流行りのHybrid?

柔軟なBase16シリーズもいいよね。

それとも僕と同じ古き良きjellybeansかな?

しかし、君はまだ知らないだろう。

そのVimのcolorschemeがまだ輝けるということを

VimのSyntax Highlightingは不完全

VimのSyntax HighlightingはもともとIDEと比べると完璧とは言い難い。

文法が複雑な言語で複雑な処理を書くと、その差ははっきり現れてくる。

PhotonのPythonのコードをVimとVSCodeで見比べてみよう。

スクリーンショット 2020-12-17 7.35.00(2).png

スクリーンショット 2020-12-17 7.38.48(2).png

1枚目がVim、2枚目がVSCodeで開いたファイルだ。

colorschemeはどちらも同じjellybeans。

VSCodeは引数やネスト内の関数がハイライトされているのに、Vimでは白い文字のままだ。

これはjellybeansに限らず、どのcolorschemeでも同じようにハイライトされない処理が存在する。

このようにVimのSyntaxの解析には限界がある。

しかし、だからと言ってその程度の理由でIDEに戻るわけにはいかない。

でも綺麗なThemeで開発したい...

今日はそんな君の悩みを解決しよう!

nvim-treesitter

logo.png
https://github.com/nvim-treesitter/nvim-treesitter

nvim-treesitterはtree-sitterという構文解析ツールを導入したNeovimのプラグインだ。

このプラグインを導入することで、defaultのVimではできなかった複雑なSyntaxも判別できるようになる。

以下がプラグイン適用前と適用後の違いだ。

スクリーンショット 2020-12-17 7.49.30(2).png

左が素のVimで右がtreesitterを適用したNeovimだ。

先ほどはハイライトされなかった引数やネストされた関数たちがちゃんとハイライトされている。

もう少しわかりやすい例で見てみよう。

次はOpenCVのC++のコードだ。

aaa.png

引数、モジュール名、関数、標準ライブラリ、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.

183
152
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
183
152

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?