Execute a command in tmux new window

私は普段ターミナルなどのタブ機能ではなく、tmuxのウィンドウを使っている。
メインのウィンドウは常にbashの状態にしておき、vimやtig、manなどは別ウィンドウを開くというようにしている。 これはtmux neww -n vim vimのようにすればできる。
ただ毎回tmux newwを実行するのは少し煩わしい。 そこでちょっとしたbash関数を定義して別ウィンドウで実行したいコマンドをラップするようにしている。
以下にその関数を定義したbashスクリプトを示す。

このスクリプト(commands.bash)をHomeディレクトリなどに置き、 .bashrc でsource ~/commands.bashしておけばよい。

ラップした関数はtmux上で実行されたかどうかを判定し、 tmux上であれば別ウィンドウで実行、 そうでなければ通常通り実行するようになっている。

vimだけ専用の関数を定義しているが、これはbashをviモード実行するため。 bashをviモードで利用していて、実行するコマンドを編集するためにvimを起動することもある。 その際にtmuxの別ウィンドウでvimが起動してしまわないようにするための分岐が必要なので、専用の関数を定義している。 bashをviモードで使わない人は専用の関数を定義する必要はない。

新しいコマンドを同様に別ウィンドウで実行したければ、 スクリプト下部のようにeval "$(wrap_with_neww_in_tmux some-command)"とすればよい。