LoginSignup
1
0

More than 1 year has passed since last update.

nvim-scrollbarにOneDarkのカラーテーマを適用させる

Posted at

Neovimにスクロールバーを追加するnvim-scrollというNeovim向けのプラグインがある。
これを使うと、コード全体のどこでLSPエラーが起きているかや、今のカーソル位置がNeovimのスクロールバーに表示される。
また、他のプラグインと連携することで、検索した単語がどこにあるのかや、コードに対して追加・変更・削除した場所が表示される。

各プラグインの設定例をコピペしただけだと自分が使っているOneDarkの検索ハイライトにならなかったため、ちゃんと調査した。
そして色を調整したらプラグイン追加毎(というかプラグインキャッシュコンパイル毎)にロードエラーが出るようになったため、そこも調整することにした。

できたもの

  • 検索ハイライトとgitの変更点を、OneDarkのカラースキーム設定を用いてnvim-scrollbarに表示するようにした。
    スクリーンショット 2023-04-30 0.41.56.png

やったこと

  • OneDarkのカラーテーマを取得してnvim-scrollbarに渡す
  • gitsignsとnvim-hlslensをnvim-scrollbarと連携させる
  • packerで起動順の依存をちゃんと指定する

環境

以下の環境でやった

メモ程度にコミットIDを記入したが、多分気にしなくてよい

細かい手順

OneDarkのカラーテーマを取得してnvim-scrollbarに渡す

OneDarkには'dark', 'darker', 'cool', 'deep', 'warm', 'warmer', 'light'と、複数のカラーテーマがある。
以下のようにすればテーマごとの色が取得できるが、テーマを変えると[カラーテーマ]も編集する必要があって面倒。

local color = require('onedark.palette')
print(color.[カラーテーマ].black)

ところがrequire('onedark.color')を使うと、Oneテーマを読み込むときに設定したカラーテーマの値を取得できる。

require('onedark').setup {style = [カラーテーマ]}で設定したものがvim.g.onedark_config.styleに代入される。

onedark.nvim/lua/onedark/colors.lua
local colors = require("onedark.palette")

local function select_colors()
	local selected = { none = "none" }
	selected = vim.tbl_extend("force", selected, colors[vim.g.onedark_config.style])
	selected = vim.tbl_extend("force", selected, vim.g.onedark_config.colors)
	return selected
end

return select_colors()

これで、setupで設定したOneDarkのカラーテーマのテーブルを取得できる。

あとはnvim-scrollbarの設定サンプルを参考に設定する。

config/nvim-scrollbar.lua
local colors = require('onedark.colors')

require('scrollbar').setup({
  marks = {
    Search = { color = colors.orange },
  },
}

gitsignsとnvim-hlslensをnvim-scrollbarと連携させる

これはnvim-scrollbarのREADME.mdにある設定例をそのまま使った。

  • gitsigns
    gitsignsに対しての設定
    use {
      "lewis6991/gitsigns.nvim",
      config = function()
        require('gitsigns').setup()
        require("scrollbar.handlers.gitsigns").setup()
      end
    }
    
  • vim-hlslens
    nvim-hlslensに対しての設定
    use {
      "kevinhwang91/nvim-hlslens",
      config = function()
        -- require('hlslens').setup() is not required
        require("scrollbar.handlers.search").setup({
            -- hlslens config overrides
        })
      end,
    }
    

packerで起動順の依存をちゃんと指定する

ここまででも動くことには動くが、プラグインを追加して:PackerCompileを実行するたびエラーが発生する。
これはgitsignとvim-hlslensの起動順がonedarkとnvim-scrollbarに依存しており、プラグインのロード順が正しく設定されていないためである。

ロード順を設定するために、nvim-srollbar, gitsign, vim-hlslensそれぞれにwantsオプションを付ける。
これをつけることで、該当するプラグインを読み込む前に指定したプラグインを読み込むことができる。
こうすることで、onedark→nvim-scrollbar→gitsign, vim-hlslensの順に読み込める。

plugins.lua
-- nvim-scrollbar
use {
    "petertriho/nvim-scrollbar",
    config = function()
      require('config.nvim-scrollbar')
    end,
    wants = { 'onedark.nvim' }
  }
-- gitsigns.nvim
  use {
    'lewis6991/gitsigns.nvim',
    config = function()
      require('config.gitsigns')
    end,
    wants = { 'nvim-scrollbar' },
  }
-- search highlight
  use {
    'kevinhwang91/nvim-hlslens',
    config = function()
      require('config.nvim-hlslens')
    end,
    wants = { 'nvim-scrollbar' },
  }

おわりに

  • 各プラグインのドキュメントや、ソースコードを読むとやりたい設定がちゃんとできることがよく分かった。一次ソース確認は大事。
  • 参考になるかは分かりませんが、ここで設定したものはこちらに置いています。

参考文献

1
0
0

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
1
0