はじめに
tmuxを使っている時、「今のpaneを維持したまま、コマンドを別paneで簡単に実行したい」と思ったので実装してみました。
動作環境
| バージョン | |
|---|---|
| OS | Mac OS X 13.4 Ventura |
| shell | zsh 5.9 (x86_64-apple-darwin22.1.0) |
| tmux | tmux 3.3a |
実装
sp, spl, vsp, vsplの4つのコマンドを実装しました。
# tmuxで新しくペインを作成してコマンドを実行
# 水平分割
function sp() {
_sp "$*"
}
# 水平分割してless
function spl() {
_sp "$* | less"
}
function _sp() {
tmux split-window "$*"
}
# 垂直分割
function vsp() {
_vsp "$*"
}
# 垂直分割してless
function vspl() {
_vsp "$* | less"
}
function _vsp() {
tmux split-window -h "$*"
}
実装の内容としては、コマンドの引数をそのまま tmux split-window に渡して実行しています。
sp, spl がpaneの水平分割、 vsp , vspl が垂直分割です。
lがついているものとついていないものの差は、入力したコマンドに対して less をかけているかどうかです。
なぜ less をかけているかというと、 tmux split-window に渡したコマンドがすぐに終わってしまうコマンドだと一瞬でpaneが終了してしまい、内容を確認できないためです。
man ls のようにユーザー側でアクションを起こさないと終了しないコマンドなら sp や vsp でよいですが、 ls のように勝手に終了するコマンドの場合は spl や vspl で less をかけてやる必要があります。
完成!
こんな感じです。
一時的にpaneを分割し、分割したpaneでコマンドを実行し、コマンドが終了するとpaneが閉じます。
終わりに
今までは別paneでコマンドを実行したい場合は
- paneを分割
- そのpaneでコマンドを実行
- paneを閉じる
の手順が必要でしたが、その手間が省けるようになりました。
だいたい望み通りの挙動をしているのですが、あとはコマンドが色のついたテキストを出力する場合に色がなくなってしまうのをなんとかしたいなと思います。
