🎨

Neovimで最後に選択したカラースキームを次回起動時に復元する方法

に公開

はじめに

Neovimで気分や作業内容に応じてカラースキームを変更することがあります。しかし、デフォルトでは次回起動時に設定ファイルで指定したカラースキームに戻ってしまいます。

本記事では、最後に選択したカラースキームを自動的に保存し、次回起動時に復元する方法を紹介します。

実装方法

1. カラースキーム変更時の自動保存を設定

カラースキームが変更されたときに自動的に保存する autocmd を設定します。

この設定は、init.lualua/config/autocmds.lua などの適切な場所に配置してください。

-- カラースキーム変更時に自動保存
vim.api.nvim_create_autocmd('ColorScheme', {
  desc = 'Save colorscheme selection for next session',
  group = vim.api.nvim_create_augroup('colorscheme-persist', { clear = true }),
  callback = function()
    local colorscheme = vim.g.colors_name
    if colorscheme then
      local cache_dir = vim.fn.stdpath 'cache'
      local colorscheme_file = cache_dir .. '/colorscheme.txt'
      local file = io.open(colorscheme_file, 'w')
      if file then
        file:write(colorscheme)
        file:close()
      end
    end
  end,
})

2. 起動時にカラースキームを復元

起動時に保存されたカラースキームを読み込む処理を追加します。

-- 保存されたカラースキームを読み込む
local function load_colorscheme()
  local cache_dir = vim.fn.stdpath 'cache'
  local colorscheme_file = cache_dir .. '/colorscheme.txt'
  local file = io.open(colorscheme_file, 'r')

  if file then
    local saved_colorscheme = file:read '*a'
    file:close()
    -- 改行を除去
    saved_colorscheme = saved_colorscheme:gsub('\n', '')

    -- カラースキームを適用(エラーハンドリング付き)
    local ok = pcall(vim.cmd.colorscheme, saved_colorscheme)
    if not ok then
      -- 失敗したらデフォルトのカラースキームを使用
      vim.cmd.colorscheme 'default'
    end
  else
    -- ファイルがなければデフォルトを使用
    vim.cmd.colorscheme 'default'
  end
end

-- Neovim起動時に実行
load_colorscheme()

仕組みの解説

保存処理

  1. ColorScheme イベントが発生したとき(カラースキームが変更されたとき)にコールバックが実行される
  2. vim.g.colors_name から現在のカラースキーム名を取得
  3. vim.fn.stdpath('cache') でキャッシュディレクトリのパスを取得
  4. colorscheme.txt ファイルにカラースキーム名を書き込み

読み込み処理

  1. Neovim起動時に load_colorscheme() 関数が実行される
  2. キャッシュディレクトリから colorscheme.txt を読み込み
  3. ファイルが存在すれば保存されたカラースキームを適用
  4. ファイルが存在しない、または読み込みに失敗した場合はデフォルトのカラースキームを適用

カラースキームの切り替え方法

Neovimにはデフォルトでいくつかのカラースキームが含まれています。

コマンドで切り替え:

:colorscheme blue
:colorscheme darkblue
:colorscheme desert
:colorscheme habamax
:colorscheme lunaperche
:colorscheme slate

Telescopeがインストールされている場合は、より便利に切り替えられる:

:Telescope colorscheme

変更したカラースキームは自動的に保存され、次回起動時に復元されます。

まとめ

この方法を使うことで、Neovimで最後に選択したカラースキームを次回起動時に自動的に復元できます。

ポイント:

  • ColorScheme イベントで自動保存
  • キャッシュディレクトリにテキストファイルで保存
  • 起動時に保存されたカラースキームを読み込み
  • エラーハンドリングでフォールバック設定

これにより、気分に応じてカラースキームを変更して、次回起動時にそのカラースキームが維持されるようになります。

Discussion