NeoVimのテーマをTmuxのpaneIDによって決める

お久しぶりです。 昨今ではAIを使用したプログラミングが流行りに流行って、AI搭載のテキストエディタがたくさん出てきましたね。 私も色々使ってみたのですが最終的にNeoVimに戻ってきてしまいました。 NeoVimでもCopilotChat使えますしね。

色々試した中でもCursorはかなり良い線行っていたのですが、Remote Explorer周りが動かなくて断念しました。 やはり、自分で色々設定できるエディタのほうが使いやすいですね。

そんな感じで色々設定を作っていくなかでこれは微妙…ってなったものが多数あります。 今回はそんな設定の中でも特に使っていない機能を供養します。

作った経緯

これを作った経緯はTmuxでpaneを切り替えているときに、 どの画面のnvimだっけ?となるのが嫌だなと思ったからです。

しかし実際にはこのテーマしか勝たんみたいなものが切り替えまくれるほど存在せず 結局はランダムで決める形になってしまいました。 その設定が以下です。

-- ランダムにテーマを決める
local function set_random_color_scheme(color_schemes)
  local color_scheme = color_schemes[math.random(#color_schemes)]
  vim.cmd("colorscheme " .. color_scheme)
  print("color scheme: " .. color_scheme)
end
-- paneIDによってテーマを決める
local function set_color_scheme_from_tmux_pane(color_scheme)
  vim.cmd("colorscheme " .. color_scheme)
  print("color scheme: " .. color_scheme)
end
local function set_color_scheme()
  local tmux_pane_id = vim.fn.system("tmux run \"echo '#{pane_id}'\"")
  tmux_pane_id = string.gsub(tmux_pane_id, "%%", "")
  -- "colorscheme XXX"で設定するXXXをここに並べる
  local color_schemes = {
    "rose-pine-main",
    "vscode",
    "tokyonight-night",
  }
  -- paneID は数値か
  if not tonumber(tmux_pane_id) then
    set_random_color_scheme(color_schemes)
  else
    -- tmux pane id(+1) は要素数を上回るか?
    if tmux_pane_id+1 > #color_schemes then
      set_random_color_scheme(color_schemes)
    else
      set_color_scheme_from_tmux_pane(color_schemes[tmux_pane_id+1])
    end
  end
end

set_color_scheme()

今見てみるともっと効率よく書けそうですがもはやその気力はありません。

ワクワクをありがとう。