ターミナルエミュレータkittyの出力結果をVimで開く方法
ターミナルで出力された結果をスクロールしたり、コピーしたりするとき、どうやっているでしょうか。
筆者は長いことマウスでスクロールしたり選択したりしていました。
しかし、こういった作業も基本的にキーボードで行いたい(あくまで好み)と考えていたので、別の方法を探していました。
ターミナルエミュレータアプリ、kittyのscrollback bufferという機能を使えば、出力結果を任意のページャで開くことができます。
今回はこれを使って出力結果をVimに渡す設定を紹介します。
scrollback bufferの設定
kittyの設定はconfigファイル(デフォルトは~/.config/kitty/kitty.conf
)に記述します。
サンプルは公式サイトのconfigurationページからダウンロードできます。
起動キーの設定
show_scrollback
というマッピングで起動キーを設定できます。デフォルトではkitty_mod+h
で起動します。
筆者はこれは変更していません。
# default
# map kitty_mod+h show_scrollback
ページャの設定
今回の本題です。
scrollback bufferを開くアプリケーションは、scrollback_pager
という項目で指定します。デフォルトではless
になっているので、これをVim(筆者の場合はNeovim)に設定します。
# default
# scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
scrollback_pager nvim --noplugin -u ~/dotfiles/.config/nvim/min-edit.vim -c "setlocal autowriteall" -c "autocmd TermOpen * normal G" -c "silent write! /tmp/kitty_scrollback_buffer | te cat /tmp/kitty_scrollback_buffer - "
普段使用しているinit.vim
にはプラグインやlspなどの設定が入っているのですが、scrollback_pager
としては不要なものがほとんどです。
そこで、キーマップなどに限定したミニマルな設定ファイルを作成し、-u
オプションで呼び出しています。
setlocal autowriteall
をしているのは終了時に保存確認の警告が出るのが煩わしいため、autocmd TermOpen * normal G
をしているのはバッファの最新行へ移動するためです。
良いところ
scroll bufferの良いところは、「Vim移動モード」とかではなく 本当にVimで開いている ところです。
当然、Vimの機能はすべて使えますし、必要ならば各種プラグインの追加も可能です。
curlの出力結果の一部をコピーするサンプル
筆者はVimのキーマップを少し変更している(H
で行頭、L
で行末に移動 など)ので、他のターミナルに組み込まれている「Vimモード」だと微妙にミスマッチがあり、かえって操作がしづらいと感じていました。
しかし、kittyならば「そのままVimで開く」というソリューションにより、自分好みの環境で使用できます。
おわりに
kittyのscroll buffer機能の紹介でした。
kittyでVimを使っている方は試してみてはいかがでしょうか。
また、他のターミナルでも同様の機能があったらコメントに情報をいただけると嬉しいです。
参考
こちらのissueのコメントが元ネタです。
issue内の他のコメントで、いくつか別のコマンド例も提示されているので、興味のある方はご覧ください。
Discussion