Feb 27 2014

tmuxを入れてみた

なぜtmuxを入れたか

tmuxについて調べてみるとメリットとして挙がっているのは

  • セッション、ウインドウ、ペインを使って複数端末を管理できること
  • サーバに入れておけばデタッチとアタッチで全く同じ状態に復帰できたり、コマンドを走らせたまま接続を切れること
  • ペインを同期して複数のペインで同時に同じコマンドを実行できる

というようなことで、便利ではあるもののiTerm2で特に不自由も感じていないし少なくとも開発マシンには入れる必要はないかなと思っていた。しかし、もう少し調べているとtmuxがCUIであることの利点を活かした

というような使い方を見つけて、これは便利そうだし他にも色々使い道がありそうだと思い入れてみることにした。

tmuxのインストールと設定

自分はOS Xを使っているのでhomebrewで

$ brew install tmux

またtmuxを使っている時でもpbcopyやlaunchctlを使えるように

$ brew install reattach-to-user-namespace
$ echo 'set-option -g default-command "reattach-to-user-namespace -l zsh"' >> ~/.tmux.conf

ググったりmanを見たりしつつ設定した~/.tmux.confはこんな感じ

set-option -g escape-time 0
set-option -g default-command "reattach-to-user-namespace -l zsh"
set-option -g default-terminal "xterm-256color"
set-option -g mode-mouse on
set-option -g mouse-select-pane on
set-option -g mouse-resize-pane on
set-option -g mouse-select-window on

set-window-option -g utf8 on
set-window-option -g mode-keys emacs
set-window-option -g automatic-rename off

set-option -g prefix C-t
unbind-key C-b
bind-key C-t send-prefix

bind C-r source-file ~/.tmux.conf
bind C-w split-window -p 15 'tmux lsw | peco | cut -d":" -f 1 | xargs tmux select-window -t'
bind C-n next-window
bind C-o select-pane -t :.+
bind C-p previous-window
bind C-l last-pane
bind 0 kill-pane
bind 2 split-window -v
bind 3 split-window -h
bind C-y paste-buffer

set-window-option -g status-bg colour237
set-window-option -g status-fg white

set-window-option -g window-status-bg colour240
set-window-option -g window-status-fg white

set-window-option -g window-status-current-bg colour244
set-window-option -g window-status-current-fg blue

set-window-option -g window-status-current-format " #I| #W "
set-window-option -g window-status-format " #I| #W "

set-window-option -g status-right "[%Y-%m-%d(%a) %H:%M]"

tmuxinatorをインストール

現時点での最新バージョンはtmuxinator-0.6.7だった。

$ gem install tmuxinator

インストール後mux doctorで利用できる状態にあるか確認できる。
自分はzshを使っているのでzsh用の補完スクリプトをコピーして読み込ませる

$ gem contents tmuxinator | grep zsh | xargs -J % cp % ~/.tmuxinator
$ echo "[[ -s ~/.tmuxinator ]] && source ~/.tmuxinator/tmuxinator.zsh" >> ~/.zshrc

pecoと連携

以下には以前はcanythingについて書いていたけれども、今はpecoがおすすめ。
詳細はpecoの記事を参照。