Neovimにスクロールバーを追加するnvim-scrollというNeovim向けのプラグインがある。
これを使うと、コード全体のどこでLSPエラーが起きているかや、今のカーソル位置がNeovimのスクロールバーに表示される。
また、他のプラグインと連携することで、検索した単語がどこにあるのかや、コードに対して追加・変更・削除した場所が表示される。
各プラグインの設定例をコピペしただけだと自分が使っているOneDarkの検索ハイライトにならなかったため、ちゃんと調査した。
そして色を調整したらプラグイン追加毎(というかプラグインキャッシュコンパイル毎)にロードエラーが出るようになったため、そこも調整することにした。
できたもの
やったこと
- OneDarkのカラーテーマを取得してnvim-scrollbarに渡す
- gitsignsとnvim-hlslensをnvim-scrollbarと連携させる
- packerで起動順の依存をちゃんと指定する
環境
以下の環境でやった
- Neovim 0.9.0 (Release)
-
wbthomason/packer.nvim(コミットID:
dac4088
) -
navarasu/onedark.nvim(コミットID:
89dde49
) -
petertriho/nvim-scrollbar(コミットID:
f3a5469
) -
lewis6991/gitsigns.nvim(コミットID:
e5edefd
) -
kevinhwang91/nvim-hlslens(コミットID:
5e3e908
)
メモ程度にコミット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
に代入される。
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の設定サンプルを参考に設定する。
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の順に読み込める。
-- 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' },
}
おわりに
- 各プラグインのドキュメントや、ソースコードを読むとやりたい設定がちゃんとできることがよく分かった。一次ソース確認は大事。
- 参考になるかは分かりませんが、ここで設定したものはこちらに置いています。
参考文献
-
爆速で起動する Neovim を作る - Qiita
起動順周りで大変お世話になりました。