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

今のところこれだけです。

自動化起動

起動するときに毎回アタッチするとかめんどくさいのでシェルを書いて起動するやり方があったので参考にしました。

tmuxで自動的にセッションを張る、あるいはアタッチ

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って書いても良さげ。

追記

カラースキーマを追加

tmux-colors-solarized

ステータスバーはblueがいいので、それに変更

- set-option -g status-bg colour235

+ set-option -g status-bg blue

追記その2

複数人で扱うサーバーでいじる場合はキーバインドが違う等いろいろあるので、オリジナルの.tmux.confを書き換えるのはNGなので別ファイルで管理します。

vim ~/hoge/.tmux_hoge.conf

tmux -L hoge u -f ~/hoge/.tmux_hoge.conf

これで、セッションの名前をつけつつ、自分が設定したファイルを読み込んで、他の人との重複を防ぎます。

(uをつけることで文字化けを防ぐ)

tmux -L hoge u a

次回以降は、aをつけてアタッチします。(デタッチして終わるのが前提)

追記その3

  • -uをつけないておかないと文字化けするときがある。
  • ターミナルが256色対応していないときは、-2をつける。

参考URL