tmuxを入れてカスタマイズしてみた
tmuxとは、ターミナル上に複数のコンソールウィンドウを出すソフト。
開発してて、ソースとDBとログを見るような形でターミナルが複数起動する状態を維持していましたが、
なんかないかなーといろいろググってたら、tmuxというのが見つかったのでインストールしてカスタマイズしてみました。
結果的にすごい楽になりました。
・1ターミナルで複数の画面分割
・起動したときに前回の状態を引き続き操作できる
・別ウィンドウで管理できるので、ローカルとSSHで繋げたサーバーを別ウィンドウを同時に開くことも可能
インストール
sudo apt-get install tmux
ちなみにインストール方法は、linuxです。
Macの場合は、以下のコマンドでOK
brew install tmux
なぜかパッケージが見つかりませんとか怒られたので、ソースからインストール…
まずは依存関係のあるlibeventってのを入れる必要があるので、それをインストール
$ wget https://github.com/downloads/libevent/libevent/libevent-2.0.17-stable.tar.gz
$ tar zxvf libevent-2.0.17-stable.tar.gz
$ cd libevent-2.0.17-stable
$ ./configure
$ make
$ make install
次に本体
公式サイトはこちら→:http://tmux.sourceforge.net/
ダウンロードしてきて、サーバーにあげる
$ tar xvzf tmux-1.7.tar.gz
$ cd tmux-1.7
$ ./configure
$ make
$ make install
インストール中に依存関係があるLibraryが読み込めないとか怒られた。ググったらシンボリックリンクをツッコんだらOKらしい
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
やっと動いた!
基本動作
$ tmux # 起動
起動してからはPrefixというキーを入力してからなんらかのキーを入力してコマンドを実行します。
標準では、Ctrl + b がPrefixとなっています。
(以下、C-bと記述)
C-b cなら、Ctrl+bを入力して、cを入力という意味です。
$ C-b c # 新規にウィンドウを立ち上げる
$ C-b % # ウィンドウ分割(縦)
$ C-b " # ウィンドウ分割(横)
$ C-b d # デタッチ
$ tmux attach # アタッチ
$ tmux ls # セッション一覧表示
$ tmux kill-session -t session-number # セッションをコロス
$ C-b & # ウインドウ強制終了
重要なのが、アタッチとデタッチ。
デタッチすると接続が切れるが、次回アタッチすると前回の状態を引き継いだところから作業を再開できる。
これは便利。
下の3つは固まって再起不能になった際に使います。
※なんかよくフリーズするけど、この原因なんだろ…
追記
以下を.ssh/configに追加することで切れなくなるようです
Host *
ServerAliveInterval 60
コンフィグファイルの生成及び設定
そのままでも使えますが、キーバインドが嫌だったりするのでコンフィグファイルの生成をして設定を変えます。
vi ~/.tmux.conf
# デフォルトのPrefix(C-b)を解除
unbind C-b
#ヒストリーサイズ
set-option -g history-limit 1000
# Prefix
set-option -g prefix C-t
# コピーモードのキーバインドをviのように
# Spaceでコピー開始、Enterでコピー終了になります
set-window-option -g mode-keys vi
# 縦分割、横分割をviのキーバインドのように
bind s split-window -v
bind v split-window -h
# 分割画面への移動をviのキーバインドのように
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Option
# utf8有効
set-window-option -g utf8 on
# マウス有効。MacのTerminal.appでは効かず…
set-option -g mouse-select-pane on
# prefix + r で設定ファイルを再読み込み
unbind r
bind r source-file ~/.tmux.conf
# マウスでペイン移動
set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on
#### COLOUR (Solarized 256)
# default statusbar colors
set-option -g status-bg blue #base02
set-option -g status-fg colour136 #yellow
set-option -g status-attr default
# default window title colors
set-window-option -g window-status-fg colour244 #base0
set-window-option -g window-status-bg default
#set-window-option -g window-status-attr dim
# active window title colors
set-window-option -g window-status-current-fg colour166 #orange
set-window-option -g window-status-current-bg default
#set-window-option -g window-status-current-attr bright
# pane border
set-option -g pane-border-fg colour235 #base02
set-option -g pane-active-border-fg colour240 #base01
# message text
set-option -g message-bg colour235 #base02
set-option -g message-fg colour166 #orange
# pane number display
set-option -g display-panes-active-colour colour33 #blue
set-option -g display-panes-colour colour166 #orange
# clock
set-window-option -g clock-mode-colour colour64 #green
今のところこれだけです。
自動化起動
起動するときに毎回アタッチするとかめんどくさいのでシェルを書いて起動するやり方があったので参考にしました。
vi ~/tmux.sh
if $(tmux has-session); then
killall -SIGWINCH tmux
tmux attach
else
tmux
fi
fi
# 終了して、.bashrcとかに登録する
vi .bashrc
alias tmux='sh tmux.sh';
# 別に.bashrcにtmux attachって書いても良さげ。
追記
カラースキーマを追加
ステータスバーはblueがいいので、それに変更
- set-option -g status-bg colour235
+ set-option -g status-bg blue
追記その2
複数人で扱うサーバーでいじる場合はキーバインドが違う等いろいろあるので、オリジナルの.tmux.confを書き換えるのはNGなので別ファイルで管理します。
これで、セッションの名前をつけつつ、自分が設定したファイルを読み込んで、他の人との重複を防ぎます。
(uをつけることで文字化けを防ぐ)
tmux -L hoge u a
次回以降は、aをつけてアタッチします。(デタッチして終わるのが前提)
追記その3
- -uをつけないておかないと文字化けするときがある。
- ターミナルが256色対応していないときは、-2をつける。
参考URL
- 非root権限でHOMEにtmuxを入れた
- .tmux.confをごにょごにょする
- screen(だけ)の時代は終わり。tmuxでリモートコンソールを便利に使うTips
- .tmux.conf
- screenをやめてtmuxへ
- tmuxのすすめ
独り言
たまに固まるのが解消したら完璧なのに…