【Mac】Neovimのスムーズスクロールとカーソル移動アニメーションでかっこ良くする

6 min

こんにちは。ナミレリです。Neovimの見た目をカスタマイズし、より快適で魅力的な環境にすることを目指し、今回は、Neovimのプラグインであるneoscroll.nvimSmoothCursor.nvim、そしてautocmdを組み合わせて、ファイルを開いた際に前回の位置までカーソルをスムーズスクロールで移動させて、下の動画のようにカーソルの行移動をアニメーションする方法を紹介します。

neoscroll.nvimSmoothCursor.nvimを利用することで、Neovimの見た目と使い勝手が大幅に向上しNeovimの体験を一層楽しむことができます。下の動画でイメージしていただけると思います。

カーソルのアニメーションとスムーズスクロール

カーソルのアニメーションとスムーズスクロール

この記事はこんな人にオススメ

  • 上の動画のように、Neovimのカスタマイズをもっと楽しみたい方
  • Neovimのエディタとしての見た目やフィードバックに敏感な方
  • 美しいインタフェースでモチベを上げたい方
  • Neovim独自の機能やプラグインシステムをフルに活用したい方
この記事の環境
M3 MacBook Air
  • M3 MacBook Air 15インチ(メモリ24GB)
  • macOS Sonoma 14.4
  • Neovim v0.9.5
Parallels Desktop 20 for Macの無料トライアル もありますので、ぜひダウンロードして試してみてください。M1/M2/M3のMac上で快適にMacやUbuntu、Windowsが動作します。
NEW Parallels Desktop 20 for Mac

Parallels Desktop 20 for Macは、M1/M2/M3のMac上で快適にMacやUbuntu、Windowsが動作します。

14日間の無料トライアルもありますので、ぜひダウンロードして試してみてください。

はじめに

今回紹介するプラグインについて簡単に紹介します。

neoscroll.nvim

neoscroll.nvimは、Neovimでスムーズなスクロールアニメーションを実現するlua制のプラグインです。neoscroll.nvimは、ページ内での上下移動を滑らかにより自然な体験を提供してくれます。設定によってスクロール速度やアニメーションの時間をカスタマイズすることができます。

SmoothCursor.nvim

SmoothCursor.nvimは、カーソルの行移動にアニメーションを加えるプラグインです。カーソルが行を移動する際に滑らかなトランジションを表示し、Neovim内のナビゲーションをより直感的で美しいものにしてくれます。

SmoothCursor.nvim:カーソルの動きにアニメーションを加えるプラグイン
SmoothCursor.nvim:カーソルの動きにアニメーションを加えるプラグイン

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)

上の設定では、ggGにでもスムーズスクロールの設定を追加しています。C-uC-dC-bC-fztzzzbなどもスムーズスクロールするようになっているはずです。

neoscroll.nvimでスムーズスクロールした動画

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でカーソルの行移動をした動画

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をかっこ良くクールに使う設定

カテゴリー:
関連記事