@ryoppippi

マクロ記録中にColorSchemeを変更する設定をしました

30 Apr 2024 ・ 7 min read


Note

この​記事はVim 駅伝の​ 5/1 の​記事です。

TL;DR

0.gif マクロ記録中に​ColorSchemeが​変わっている​様子

はじめに

Neovimの​設定と​して、​欠かせない​(?)​ものの​一つが​Statuslineです。 Statuslineとは、​エディタの​下部に​表示されている​Barの​ことです。

Neovim向けに​有名な​ものだと、​lualine.nvimや​heirline.nvimが​あります https://github.com/nvim-lualine/lualine.nvim https://github.com/rebelot/heirline.nvim https://zenn.dev/kyoh86/articles/681ab90a44302c

さて、​ 自分の​Neovimの​設定では​Statuslineを​非表示に​しています。 これは、​常に​表示して​おきたい​情報と​いうのは​実は​そんなに​ないだろうと​いう​考えからです。 必要な​情報は​必要な​時に​表示を​すれば​良いのです。 むしろ​その​一行分​画面が​広くなり、​画面の​ノイズも​減るので​嬉しいのです。

1.jpg 自分の​Neovimの​ScreenShot

余談ですが、​Statuslineに​加えて​Cmdlineも​非表示に​しています。 こちらの​話は​Shougoさんの​記事に​詳しく​書いてあります。

https://zenn.dev/shougo/articles/set-cmdheight-0

さらに​いえばshowmodeも​オフに​しています。 これは、​vimの​下部に​表示される​modeの​情報を​非表示に​する​ためです。

以上の​設定に​より、​画面下部に​表示される​情報は​ほぼなくなりました。

https://vim-jp.org/vimdoc-ja/options.html#‘showmode’

Statuslinelineや​Cmdlineを​補う​プラグインたち

Statuslineや​Cmdlineを​非表示に​していると、​その​代わりに​何かしらの​情報を​表示する​プラグインが​必要に​なります。 自分の​設定では、​以下の​プラグインを​使っています。

  • modes.nvim - カーソルの​色を​モードに​応じて​変更する。​これで​vimの​下部に​表示される​modeの​情報を​補っています。
  • noice.nvim - Cmdlineを​画面中央に​popupで​表示する。​これで​Cmdlineの​情報を​補っています。​また、​messageの​表示も​通知のように​ふわっと​表示させる​ことに​しています。​ noice.nvim
  • dropbar.nvim - window上部のwinbarに​カーソルの​位置の​情報を​表示する。​ファイル名、​メソッド名などの​情報を​表示しています。

足りない​もの、​マクロ記録中かの​判断材料

しかし、​これらの​プラグインでは​足りない​ものが​あります。 それは、​マクロ記録中か​どうかの​情報です。

もしもshowmodeが​オンに​なっている​場合、​マクロ記録中か​どうかは-- (recording@)と​いう​文字列が​表示されます。 しかし、showmodeが​オフの​場合、​この​情報は​表示されません。

一応noice.nvimの​設定で​記録開始時に-- (recording@)と​いう​文字列を​通知と​して​一瞬​表示させる​ことは​できますが、​画面に​ずっと​残して​置く​ことは​できなません。

自分は​度々マクロを​記録するのですが、​しばしば​マクロの​記録が​暴発してしまい、​今は​記録中なのか、​記録中ならばどの​レジスタに​記録しているのか、と​いう​情報が​欲しいと​思っていました。

ColorSchemeを​変更すると​いう​選択肢

ColorSchemeを​自由に​変えて​何らかの​情報を​表示すると​いう​考えは、​過去には​Atusyさんの​記事で​紹介されていました。 https://blog.atusy.net/2022/12/17/styler-nvim-active-win/

この​考えを​参考に​して、​マクロ記録中に​ColorSchemeを​変更すると​いう​設定を​しました。

設定

まず、​自分は​Colorschemeに​kanagawa.nvimを​使っています。

https://github.com/rebelot/kanagawa.nvim

kanagawa.nvimには3種類の​バリエーションが​あるので、​バリエーションを​切り替えて​状態を​表すことにしました。

https://github.com/ryoppippi/dotfiles/blob/c08768adf7ad4e15098be1ea3592b4422d66ba29/nvim/lua/plugin/ryoppippi-macro-colorscheme.lua?plain=1#L54-L77

上記の​コードを​解説すると

  • vim.on_keyで​キーが​押された​時の​処理を​登録する。
  • キーが​押されると、vim.fn.reg_recording()を​使って​マクロ記録中か​どうかを​判定し、​それに​応じて​ColorSchemeを​変更する。

と​いった​処理を​しています。 これで、​マクロ記録中か​どうかの​情報を​ColorSchemeで​表現する​ことができました。

また​加えて、​どの​レジスタに​記録しているかを​popupで​表示するようにしました。 これにはnui.nvimを​使っています。

https://github.com/MunifTanjim/nui.nvim https://github.com/ryoppippi/dotfiles/blob/c08768adf7ad4e15098be1ea3592b4422d66ba29/nvim/lua/plugin/ryoppippi-macro-colorscheme.lua?plain=1#L25-L52

こうして​冒頭の​スクリーンキャプチャのように、​マクロ記録中の​情報を​視覚的に​把握する​ことができました。

まとめ

マクロ記録中か​どうかの​情報を​ColorSchemeで​表現する​ことで、​マクロ記録中の​情報を​視覚的に​把握する​ことができました。 また、​どの​レジスタに​記録しているかの​情報を​popupで​表示する​ことで、​マクロ記録中の​情報を​より​詳細に​把握する​ことができました。

enjoy!

comment on bluesky / twitter
CC BY-NC-SA 4.0 2022-PRESENT © ryoppippi