2015年最初の投稿です。本年もよろしくお願いいたします。
全然書いてなかったので書きます。 ブログは定期的に書いてないと書き方を忘れてしまいがちなので、 もう少し気軽に書いていければと思います。
tmux、めっちゃ便利ですよねー。
便利なので、開きっぱなしにしちゃいがちなんですが、 本当は使うもの以外を閉じておきたいのです。
そもそも tmux のセッション管理だとか、あるいは tmuxinator など色々便利なものがありますが、 もうちょっと気軽にさくっと扱えればいいなーと思ってました。
何がやりたいかというと・・・
このあたりができればいいなと思います。
特に tmux の細かな使い方が理解できていなかったので、 man tmux
や [prefix] ?
などでドキュメントを読んでみました。
# ウィンドウを新しく作って、最初のディレクトリを合わせて指定
new-window -c "/path/to/dir"
# ウィンドウを上下に分割(水平)
split-window -h
# 現在のペインに対してキー入力を行う
send-keys "echo 'test123'"
# tmux で入力を受け付けて、シェルスクリプトを実行
command-prompt "run-shell 'cd /path/to/dir'"
他にもたくさんありますが、今回関連しそうなのはこのあたりっぽいですねー。
まず、プロジェクト名の引数を1つとって、上記のコマンドの組み合わせでお好みのペインを作るところまでをシェルスクリプトで用意します。
たぶん人によってやりたいことは大分違ってきますし、 画面の分割以外にもシェルスクリプトでやれることなら色々と書けるはずなので、 僕の場合はタスクランナーを実際に走らせるところまでやっています。 (それ以上の細かいところは、これから考えていければと・・・)
#!/bin/sh
if [ $# -eq 1 ]; then
TMUX_PROJECT_NAME="/var/www/$1"
else
echo "usage: tmux-project (projectname)" 1>&2
exit 1
fi
if [ ! -e $TMUX_PROJECT_NAME ]; then
echo "no exist: $TMUX_PROJECT_NAME" 1>&2
exit 1
fi
tmux new-window -c $TMUX_PROJECT_NAME
tmux split-window -c $TMUX_PROJECT_NAME -h
tmux split-window -c $TMUX_PROJECT_NAME -v
# has Gruntfile.js
if [ -e "$TMUX_PROJECT_NAME/Gruntfile.js" ]; then
tmux send-keys "grunt watch^M"
fi
tmux select-pane -t 1
※実際はもっと具体的な記述になってますが、ざっくりこのような感じです。
このシェルスクリプトをとりあえず proj という名前にしておき、 ホームディレクトリの bin ディレクトリに入れて、パスを通して使ってます。 (&実行権限も)
今度は .tmux.conf に以下の設定を追記します。
# 予め用意した proj シェルスクリプトに tmux の入力受け付けで引数を渡す
# シェルスクリプト上でエディタ、シェル、タスクランナーなどに分割表示
bind-key P command-prompt -p "projectname:" "run-shell 'proj %1'"
プロジェクト管理ということなので、プレフィックスキーに続いて Shift-P キーで起動するようにしてみました。 command-prompt を割り当てた場合、そのキーを押すと以下のように入力部分が出てきます。
入力した文字が %1, %2 などで利用できるので、先ほどのシェルスクリプトと組み合わせると幸せになれますね。
tmux のオプションがたくさんあって、調べるのにけっこう時間かかってしまいましたが、 同じペインの組み合わせを作ることがけっこう多いので、 そういった部分は可能な限り自動化されていると良いですよね。
試してみて、以下の組み合わせは有用だと思いました。
ベースの部分がシェルスクリプトなので、今後新たなツールとかが出てきたとしても、 コマンドラインで動作できるものであれば、シェルスクリプトに落とし込みが可能です。 依存してるものが少ないというのもメリットなのかもしれませんね。
ではそろそろ、元々の仕事に戻りたいと思います・・・。
この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります