数多あるNeovimのGUIの1つに、Neovideというものがあり。
neovide/neovide: No Nonsense Neovim Client in Rust https://github.com/neovide/neovide
このGUIの特徴の1つとして、カーソル移動の軌跡をヌルっとアニメーションさせられるというのがある。
初見ではすぐ飽きると思ってたけど、しばらく使ってみるとこれが意外とわかりやすくていい・・・って感想に。(きっと歳のせいもあるんやろうな)
ただ一身上の都合により、TUIのNeovimしか受け入れられないカラダなので、GUIであるNeovideを使うことはできない。
Neovideの中で:terminal
して、そこから同じNeovideのウィンドウでファイルを編集できればワンチャンあったけど、どうやらそれはできないらしい。
How do i launch neovide inside a terminal instead of it opening in another window · neovide/neovide · Discussion #1104 https://github.com/neovide/neovide/discussions/1104
neovim-remoteなるプロセスを経由させれば、なんとかできんこともないらしいけど、うーむ。
まあできたとしても手癖で:q
しちゃってすべて終了!みたいになるのは目に見えてるしな。
mini.animate
というわけで、TUIでもそれらしいUXを得ることはできないか?と探し回った結果、一番それっぽくできたのがこのプラグイン。
echasnovski/mini.animate: Neovim Lua plugin to animate common Neovim actions. Part of ‘mini.nvim’ library. https://github.com/echasnovski/mini.animate/tree/main
本当にmini
一家にはなんでもあってすごい。氏はもっと評価されてほしい。
このプラグインを有効にすると、カーソルだけでなく、スクロールやリサイズなんかもアニメーションさせられる。
サポートされてるのは以下の通り。
cursor
scroll
resize
open
close
そしてカーソルの軌跡のアニメーションも4パターンから選べる。
line
: 始点から終点へ直線的に(斜めにも)angle
: 終点の直上・直下にまず平行移動し、そのあと直角に(マンハッタン距離的な)walls
: 終点で左右に広がる波の壁みたいなエフェクトspiral
: 渦を巻きつつ終点へ
という感じ。(spiral
はネタ枠っぽいなって思ったけどw)
あとはアニメーションのタイミングもカスタマイズできる。
個人的に使ってるNeovideのソレに最も似せた設定がこちら。
local animate = require("mini.animate")
animate.setup({
cursor = {
timing = animate.gen_timing.exponential({ easing = "out", duration = 100, unit = "total" }),
path = animate.gen_path.line({ predicate = function() return true end }),
},
})
gen_path.xxx
のpredicate
で常にtrue
を返すと、たとえ1マスの移動でもエフェクトが発生するようにできる。
というわけで、これでTUIなNeovimのままでも、カーソルの軌跡をアニメーションさせられた!
CJKでの表示崩れ
上述の設定を使った場合、日本語もとい正確にはdouble widthな文字の上でエフェクトが発生すると、そこの表示が崩れるっていうバグがあった。
mini.animate: Text rendering on CJK line is corrupted with
predicate: () => true
· Issue #648 · echasnovski/mini.nvim https://github.com/echasnovski/mini.nvim/issues/648
というIssueを立てたら、Neovim本体のバグだったらしく、なんと上流もまとめて解決してもらえた。
Putting extmark inside double width character may cause rendering issues · Issue #26949 · neovim/neovim https://github.com/neovim/neovim/issues/26949
感謝感激である。
ただこの修正が入るのは0.10
以降らしく、そのリリース予定は3月?と少し先だったので、手元ではしばらくdev版を使うことにした。
0.10 Milestone https://github.com/neovim/neovim/milestone/36
そのほか
stonelasley/flare.nvim: Configurable Cursor highlighting. https://github.com/stonelasley/flare.nvim
当初求めてたものとは違うけど、
- 軌跡はなくてよい
- 終点だけ強調できればいい(
mini.animate
でいうwalls
)
という場合は、こっちのプラグインも選べるかもしれない。