styler.nvimを使うとバッファごとにcolorschemeを変えられて便利

by
カテゴリ:
タグ:

This Week in Neovimという、週次でNeovim関係のニュースを届けてくれるウェブサイトの21 Nov 2022号で、プラグインのfolke/styler.nvimが紹介されていました。

このプラグインの目的は、READMEにある通り、ファイルタイプごとのカラースキーム設定です。

Simple Neovim plugin to set a different colorscheme per filetype.

実は、もう少しRADMEを読み進めるとStylerコマンドやrequire("styler").set_theme()関数を使うと、バッファ単位でのカラースキームの設定が可能です。

私はバッファのファイルパスが作業ディレクトリ以下にあるか否かでカラースキームを変えたかったので、実に都合がよさそうです。

過去にもこの目的で記事を書きましたが、当時のNeovimの機能では全体のカラースキームを変えるしかありませんでした。このため、カレントバッファが作業ディレクトリ下にあるかは分かるが、どのウィンドウのバッファが作業ディレクトリ下にあるかは分からないという問題を抱えていました。

Neovimのカラースキームを編集中のバッファのファイルパスに応じて変える

styler.nvimの登場で完成に至れました。

-- CWD外のバッファに適用したいカラースキーム
-- vim.api.nvim_set_hlを使っているNeovim向けカラースキームしか使えない点に注意
local ALTERNATIVE_COLORSCHEME = "terafox"

-- styler.nvimを発動するautocmd
-- ノーマルバッファで且つ、保存先がCWD外ならALTERNATIVE_COLORSCHEMEを適用
vim.api.nvim_create_autocmd(
  'BufEnter',
  {
    group = vim.api.nvim_create_augroup('styler-custom', {}),
    desc = 'Change theme by the path of the current buffer.',
    callback = function(args)
      if vim.api.nvim_buf_get_option(0, "buftype") ~= '' then return end
      if args.file == '' or vim.startswith(args.file, fn.getcwd() .. '/') then return end
      require('styler').set_theme(0, { colorscheme = ALTERNATIVE_COLORSCHEME })
    end
  }
)

注意点は2つ。

styler.nvimと関係ないところでは、Markdown内のコードブロックとかに任意のカラースキームを適用できたら最高だなーと思ってます。

Enjoy!!