こんにちは。ナミレリです。Neovimの見た目をカスタマイズし、より快適で魅力的な環境にすることを目指し、今回は、Neovimのプラグインであるneoscroll.nvim、SmoothCursor.nvim、そしてautocmdを組み合わせて、ファイルを開いた際に前回の位置までカーソルをスムーズスクロールで移動させて、下の動画のようにカーソルの行移動をアニメーションする方法を紹介します。
neoscroll.nvim、SmoothCursor.nvimを利用することで、Neovimの見た目と使い勝手が大幅に向上しNeovimの体験を一層楽しむことができます。下の動画でイメージしていただけると思います。
カーソルのアニメーションとスムーズスクロール
この記事はこんな人にオススメ
- 上の動画のように、Neovimのカスタマイズをもっと楽しみたい方
- Neovimのエディタとしての見た目やフィードバックに敏感な方
- 美しいインタフェースでモチベを上げたい方
- Neovim独自の機能やプラグインシステムをフルに活用したい方
- M3 MacBook Air 15インチ(メモリ24GB)
- macOS Sonoma 14.4
- Neovim v0.9.5
目次
はじめに
今回紹介するプラグインについて簡単に紹介します。
neoscroll.nvim
neoscroll.nvimは、Neovimでスムーズなスクロールアニメーションを実現するlua制のプラグインです。neoscroll.nvimは、ページ内での上下移動を滑らかにより自然な体験を提供してくれます。設定によってスクロール速度やアニメーションの時間をカスタマイズすることができます。
SmoothCursor.nvim
SmoothCursor.nvimは、カーソルの行移動にアニメーションを加えるプラグインです。カーソルが行を移動する際に滑らかなトランジションを表示し、Neovim内のナビゲーションをより直感的で美しいものにしてくれます。
autocmdの活用
autocmdは、特定のイベントが発生したときに自動的にコマンドやスクリプトを実行する機能です。今回はファイルを開いた際に、自動的に前回のカーソル位置まで移動するように設定します。SmoothCursor.nvimを使うことで、視覚的にカーソルがアニメーションするのでモチベーションが上がります。
neoscroll.nvimのインストールと設定
では、neoscroll.nvimをインストールしていきましょう。プラグインマネージャはPackerを想定しています。
~/.config/nvim/lua/plugins.luaの編集
neoscroll.nvimの公式githubを参考に、下のように~/.config/nvim/lua/plugins.luaを編集します。
最下部のend)より前に追加します。
vi ~/.config/nvim/lua/plugins.lua
use("karb94/neoscroll.nvim")
:PackerInstallする
保存後にnvimを立ち上げ直すか、:source %で再読み込みし、:PackerInstallするとplugins.luaに書かれていてインストールされていないプラグインがインストールされます。
:PackerInstall
~/.config/nvim/init.luaの編集
下のようにinit.luaを編集し、起動時にneoscroll.nvimを読み込むようにします。
nvim ~/.config/nvim/init.lua
require("neoscroll").setup({
easing_function = "sine",
})
local t = {}
t["gg"] = { "scroll", { "-2*vim.api.nvim_buf_line_count(0)", "true", "200", [['sine']] } }
t["G"] = { "scroll", { "2*vim.api.nvim_buf_line_count(0)", "true", "200", [['sine']] } }
require("neoscroll.config").set_mappings(t)
上の設定では、ggとGにでもスムーズスクロールの設定を追加しています。C-u、C-d、C-b、C-f、zt、zz、zbなどもスムーズスクロールするようになっているはずです。
neoscroll.nvimでスムーズスクロールした動画
キーボードショートカット | 説明 |
---|---|
gg | 最初の行に移動する |
G | 最後の行に移動する |
C-u | 画面を半ページ分上にスクロールする |
C-d | 画面を半ページ分下にスクロールする |
C-b | 画面を1ページ分上にスクロールする |
C-f | 画面を1ページ分下にスクロール |
zt | 現在のカーソル行を画面の一番上に移動する |
zz | 現在のカーソル行を画面の中央に移動する |
zb | 現在のカーソル行を画面の一番下に移動する |
SmoothCursor.nvimのインストールと設定
次は、SmoothCursor.nvimをインストールします。カーソルの行移動をアニメーションさせることができるプラグインです。プラグインマネージャはPackerを想定しています。
~/.config/nvim/lua/plugins.luaの編集
SmoothCursor.nvimの公式githubを参考に、下のように~/.config/nvim/lua/plugins.luaを編集します。
最下部のend)より前に追加します。
vi ~/.config/nvim/lua/plugins.lua
use("gen740/SmoothCursor.nvim")
:PackerInstallする
保存後にnvimを立ち上げ直すか、:source %で再読み込みし、:PackerInstallするとplugins.luaに書かれていてインストールされていないプラグインがインストールされます。
:PackerInstall
~/.config/nvim/init.luaの編集
下のようにinit.luaを編集し、起動時にSmoothCursor.nvimを読み込むようにします。
nvim ~/.config/nvim/init.lua
下の例ではファンシーな演出のファンシーモードを有効にしています。
require("smoothcursor").setup({
fancy = {
enable = true,
},
})
この設定で、50j(50行下へ)や50k(50行上へ)などで行を移動してみると、カーソルの行移動がアニメーションされていると思います。
私はcatppuccinのカラーテーマを使用しているので、今回はそれに似せてみます。フォントはNerdfontsを使うようにしてください。
require("smoothcursor").setup({
fancy = {
enable = true,
head = { cursor = "", linehl = nil },
body = {
{ cursor = "", texthl = "SmoothCursorRed" },
{ cursor = "", texthl = "SmoothCursorOrange" },
{ cursor = "●", texthl = "SmoothCursorYellow" },
{ cursor = "●", texthl = "SmoothCursorGreen" },
{ cursor = "•", texthl = "SmoothCursorAqua" },
{ cursor = ".", texthl = "SmoothCursorBlue" },
{ cursor = ".", texthl = "SmoothCursorPurple" },
},
tail = { cursor = nil, texthl = "SmoothCursor" },
},
autostart = true, -- Automatically start SmoothCursor
always_redraw = true, -- Redraw the screen on each update
flyin_effect = "top", -- Choose "bottom" or "top" for flying effect
speed = 25, -- Max speed is 100 to stick with your current position
intervals = 35, -- Update intervals in milliseconds
priority = 13, -- Set marker priority
timeout = 3000, -- Timeout for animations in milliseconds
threshold = 3, -- Animate only if cursor moves more than this many lines
disable_float_win = true, -- Disable in floating windows
enabled_filetypes = nil, -- Enable only for specific file types, e.g., { "lua", "vim" }
show_last_positions = nil,
})
-- smoothcursorの色
vim.cmd("highlight SmoothCursor guifg=#a6e3a1")
vim.cmd("highlight SmoothCursorRed guifg=#f38ba8")
vim.cmd("highlight SmoothCursorOrange guifg=#fab387")
vim.cmd("highlight SmoothCursorYellow guifg=#f9e2af")
vim.cmd("highlight SmoothCursorGreen guifg=#a6e3a1")
vim.cmd("highlight SmoothCursorAqua guifg=#89dceb")
vim.cmd("highlight SmoothCursorBlue guifg=#89b4fa")
vim.cmd("highlight SmoothCursorPurple guifg=#cba6f7")
SmoothCursor.nvimでカーソルの行移動をした動画
autocmdの設定
NeovimやVimにおけるautocmdは、特定のイベントが発生したときに自動的に実行されるコマンドやスクリプトを設定するための機能です。
今回は何かのファイルを開いたときに、前回開いたファイルのカーソルの位置を復元しますが、少しの遅延をあえてして、SmoothCursor.nvimでカーソルの行移動をアニメーションさせるようにしてみます。
nvim ~/.config/nvim/lua/autocmds.lua
-- smooth scroll to cursor
local group = vim.api.nvim_create_augroup("smooth_scroll_to_cursor", { clear = true })
vim.api.nvim_create_autocmd("BufReadPost", {
group = group,
callback = function()
-- 最後のカーソル位置を取得
local last_pos = vim.fn.line([['"]])
if last_pos >= 1 and last_pos <= vim.fn.line("$") then
-- カーソルをファイルの先頭に移動
vim.api.nvim_win_set_cursor(0, { 1, 0 })
-- 少し遅延させてから最後のカーソル位置までスクロール
vim.defer_fn(function()
vim.api.nvim_win_set_cursor(0, { last_pos, 0 })
-- 'zz' コマンドでカーソル位置を中心にスクロール
vim.cmd("normal! zz")
end, 150) -- 遅延時間はミリ秒で指定
end
end,
})
このスクリプトは、BufReadPost イベントが発生した時(ファイルを開いた時)に動作します。ファイル内で最後にあったカーソル位置をチェックし、最初にカーソルをファイルの先頭に移動させます。その後、少しの遅延の後に、カーソルを最後にあった位置にスクロールして、zzでその位置をウィンドウの中心にしています。
~/.config/nvim/init.luaからrequireします。
nvim ~/.config/nvim/init.lua
require("autocmds")
ファイルを開いてカーソルの行移動をした動画
最後に
最後まで読んでいただきありがとうございます。今回のNeovimのスムーズスクロールとカーソル移動アニメーションでかっこ良くするはいかがでしたでしょうか。
Neovimのカスタマイズは、生産性を向上させる重要な要素です。neoscroll、smoothcursor、autocmdで、ページやカーソルの移動を滑らかにし、より快適で楽しいコーディング体験を実現することが可能になります。ぜひ試してみてください。
NeovimとHHKBの組み合わせは、コーディング体験を最適化し、より生産的で満足のいくものにするための最高のツールです。コーディングの楽しさと効率性を新たなレベルへと引き上げてくれます。
Neovimをかっこ良くクールに使う設定