💡

[小ネタ] coder/claudecode.nvim を使う時にフォーカスをスムーズに動かしたい

に公開

こんにちは。ダイの大冒険エンジョイ勢のbun913と申します。

普段はソフトウェア開発やテストについてZennで記事の執筆をしているのですが、本日はNeovimのプラグインに関する小ネタを紹介いたします。

coder/claudecode.nvim

以下の記事にあるように、coder/claudecode.nvimはNeovimで Claude Code を利用する上でとても便利なプラグインです。

https://qiita.com/getty104/items/c332e5f632da71523dbc

以下のように、Neovimと統合させるような形でさながら VS Code などのエディタを利用しているように Claude Code を利用できます。

claude

Claude Code を開いている時に Window の移動がうまくできない

以下の Issue にあるように、 :Claude コマンドなどで Claude Code にフォーカスを当てている時に、Esc を何度か押下しなければVimで設定しているウィンドウ間の移動ショートカットがうまく動作しません。

https://github.com/coder/claudecode.nvim/issues/53

例えば私の場合 Ctrl+l を以下のように設定しています。

-- Ctrl+h などでウィンドウ間のフォーカスを移動できるようにしている
vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })

ですが、以下のように Claude Code 側のウィンドウでノーマルモードになっていない時に何回このショートカットを入力しても、うまくフォーカスを移動できません。

claude

esc を数回押下して、Normal モードになった時にうまくウィンドウ間のフォーカス移動ショートカットが動作します。

claude

このEscを3回程度押すのが地味に面倒で、私の直感に反していました。

Wezterm を使う上での解決策

Weztermの設定ファイルにて、以下のようにCtrl+h に対して、Normalモードに戻るショートカットキーを送信してからCtrl+h を実行するように設定しました。

~/.wezterm.lua
local wezterm = require("wezterm")

local config = {}

if wezterm.config_builder then
	config = wezterm.config_builder()
end

config.keys = {
	-- Vim buffer navigation for ClaudeCode
	{
		key = "h",
		mods = "CTRL",
		action = wezterm.action.Multiple({
			wezterm.action.SendKey({ key = "\\", mods = "CTRL" }),
			wezterm.action.SendKey({ key = "n", mods = "CTRL" }),
            -- Ctrl+h には <C-w><C-h> となるようにVim側の設定でバインドしています
			wezterm.action.SendKey({ key = "h", mods = "CTRL" }),
		}),
	},
}
return config

これにより Claude Code 側で指示を入力中でも関係なくスムーズにウィンドウ間のフォーカスを移動できるようにしました。

この方法は上で紹介した Issue のコメントを参考にしました。

https://github.com/coder/claudecode.nvim/issues/53#issuecomment-3047279300

ここではWeztermの設定しか記載していませんが、SendKeyが設定できるターミナルであれば同じようなことが実現できると思います。

以上、非常に小ネタでしたが誰か一人でも困っているかもしれないと思い投稿しました。

最後まで読んでいただきありがとうございました。

GitHubで編集を提案
Money Forward Developers

Discussion