🦋
Neovimの<C-w><C-w>をchowcho.nvimで拡張する
Neovimで分割したウィンドウを移動するとき、<C-W><C-w>
をよく使います。
これは「次のウィンドウへ移動する」キーマップで、「上へ移動」「右へ移動」などと考えなくて良いので楽です。
しかし、ウィンドウが2つの場合はこれで良いのですが、ウィンドウが3つ以上ある場合、狙ったウィンドウへダイレクトに移動したいと思うようになりました。
chowcho.nvimというプラグインを使って、これを行う設定を紹介します。
設定
以下の設定をすることで、「ウィンドウが2以下なら<C-w><C-w>
でパッと移動」「ウィンドウが3以上ならchowcho.nvimで選択して移動」ができます。
local chowcho = require('chowcho')
-- <C-w>xと<C-w><C-x>を同時に設定する
local win_keymap_set = function(key, callback)
vim.keymap.set({ 'n', 't' }, '<C-w>' .. key, callback)
vim.keymap.set({ 'n', 't' }, '<C-w><C-' .. key .. '>', callback)
end
win_keymap_set('w',
function()
local wins = 0
-- 全ウィンドウをループ
for i = 1, vim.fn.winnr('$') do
local win_id = vim.fn.win_getid(i)
local conf = vim.api.nvim_win_get_config(win_id)
-- focusableなウィンドウをカウント
if conf.focusable then
wins = wins + 1
-- ウィンドウ数が3以上ならchowchoを起動
if wins > 2 then
chowcho.run()
return
end
end
end
-- ウィンドウが少なければ標準の<C-w><C-w>を実行
vim.api.nvim_command('wincmd w')
end
)
なお、ウィンドウ操作系キーは<C-w>
のプレフィックスがついているのですが、2番めのキーを入力するときに確実にctrl
キーをオフにするのは難しいため、win_keymap_set
関数を作り、<C-w>w
でも<C-w><C-w>
でも同様の処理を行うようにしています。
2画面のときは標準機能、3画面のときはchowchoで移動
ウィンドウ数によって入力を変える必要がないので便利だと思います。
ご参考になれば。
参考
Discussion