私は普段 Ubuntu を使っているのですが,複数の端末を使いたくなった時に今まで必要な数の端末を全て起ち上げていました
Ubuntu だと Ctrl + Alt + t
でメモリの限り無限に端末を起ち上げることができるので,それに任せて好き放題端末を起ち上げていました
しかしそれだと様々な問題が生じます
例えば
- 端末毎にウィンドウが起動しているので 複数の端末を扱う=複数のウィンドウを扱う になるので面倒
- 特定の端末を見ながら違う端末で作業したい場合,ウィンドウを調整しないといけない
- コピペがマウス操作でやるしか無い
- そもそも GUI 環境でなかったら不可能
- サーバーをいじりたい時に端末毎に ssh すると無駄が多い
- サーバーから一度切断してしまうと,その端末の状態というのは消えてしまう
など多くの問題があります
これらは全て tmux
で解決できます
そこで今回は tmux
の簡単な使い方と私のキーバインドの設定について紹介したいと思います
screen
との違いについては tmux
の方が新しいという事と,ライセンスが screen
は GPL で tmux
は BSD ライセンスなどの違いがあります
それに関しては 時代はGNU screenからtmuxへ – Dマイナー志向: などを参考にしてください
それでは紹介していきます
インストール
何はともあれインストールですが,以下のようにすればインストールできます
Mac
brew install tmux
Ubuntu
apt-get install tmux
ただし CentOS6 は少し複雑で yum
では入りません
なのでコンパイルしようかと思ったのですが,コンパイルしても何故か私の環境では動きませんでした
なので下のサイトを参考にして rpm
ファイルから入れることをおすすめします
またなぜか CentOS6 で起動した tmux
が設定ファイルである ~/.tmux.conf
を読み込んでくれませんでした
そういうときは C-b
してから : source-file ~/.tmux.conf
と打つと読み込まれます
追記(2013/5/17):
CentOS5 での tmux のインストール #tmux – Qiita [キータ]
にインストール方法を書きました
設定
設定は ~/.tmux.conf
に書きます
最初は何も書かずに tmux
と打って起動する人が多いと思いますが,デフォルトの状態だとプレフィックスキーに C-b
がアサインされています
つまりターミナル上で C-b
が使えなくなりますのでカーソル移動でかなりきついです
速攻で変えましょう
私は Emacs とかにもほぼ影響を与えない C-z
を選びました
1 2 | # Prefix set -option -g prefix C-z |
それと日本語環境だと必須な気がするので一応 UTF-8 の設定もしておきます(なくてもよい?)
1 2 3 | # 日本語環境なら必須?? setw -g utf8 on set -g status-utf8 on |
また設定を始める前に以下の設定をしておきましょう
1 | bind C-r source - file ~/.tmux.conf |
こうすると C-z C-r
をするだけで ~/.tmux.conf
が再読み込みされるので設定する前に設定しておくととても便利です
ステータスバー
下に今開いているウィンドウの情報などが載っているステータスバーがあります
デフォルトのままでもいい人はいいのですが,変え方を説明します
1 2 3 4 | set -g status-interval 10 set -g status- bg colour100 setw -g window-status-current- fg black setw -g window-status-current- bg white |
status-interval
はステータスバーが更新される間隔です
デフォルトは15ですが,少し長い気がするので10にしています
以下は色の設定です
順に ステータスバーの背景色・現在使っているウィンドウのフォントカラー・現在使っているウィンドウの背景色 となっています
色の指定は
black, red, green, yellow, blue, magenta, cyan, white
か colour0 - colour255
のいずれかで指定します
colour0 - colour255
って番号だと色わからないだろ!という方にとても有用な Perl スクリプトが公開されているので実行してみてください
256 colors with tmux’s colour numbers. – What’s Goin’ On Out There?
Perl が使えないとかがあれば,以下のシェルスクリプトでも簡易的ですが確認できますので実行してみてください
1 2 3 4 | for i in {255..0} ; do printf "\x1b[38;5;${i}mcolour${i} " done printf "\n" |
これで以下のような見本が出力されるはずなので参考にしてください
ちなみに私のはこんな感じです
残りの設定は使い方を説明しながら紹介していきます
使い方
ウィンドウ操作
tmux
にはウィンドウとペインという概念があります
ウィンドウはその1つ1つが端末で,ペインはウィンドウを分割した際に生じる個々の端末のことです
つまりウィンドウは複数のペインに分割することができます
ウィンドウ操作の基本的なキーバインドは以下のようになっています
C-z c | 新しいウィンドウを作成 |
C-z n | 次(next)のウィンドウに移動する |
C-z p | 前(previous)のウィンドウに移動する |
C-z w | 現在のウィンドウ一覧を開く(C-n,p とEnterで選択可能) |
ウィンドウ分割などのペイン周りのキーバインドは Emacs からかけ離れているので Emacs に近付ける設定をします
1 2 3 4 5 6 7 8 9 10 11 | # pane-active-border set -g pane-active-border- fg white # KeyBindings # pane unbind 1 bind 1 break -pane bind 2 split -window - v bind 3 split -window -h bind C-k kill -pane bind k kill -window unbind & |
pane-active-border-fg
は現在操作中のペインの周りの線を指定するもので,お気に入りの色に設定するといいと思います
# KeyBindings
以下の設定は Emacs っぽくするためのもので,以下のようなキーバインドになります
C-z 1 | ペインを分解して1つのウィンドウにする |
C-z 2 | ウィンドウを上下に分割する |
C-z 3 | ウィンドウを左右に分割する |
C-z C-k | 現在のペインを kill する |
C-z k | ウィンドウを kill する |
大分 Emacs に近くてよいです
コピーモードなど
tmux
には コピーモード があり, C-z [
でコピーモードになります
コピーモードでは Emacs キーバインドがデフォルトで, C-a,e,p,n,f,b,SPACE
や M->,<,w
など実に多くの Emacs キーバインドが使えます
単純に端末の上の方の出力を見たいというような用途にも使用出来ます
キーバインドも vi 派の人は
1 | set -window-option -g mode-keys vi |
と書けば vi キーバインドになるようです
キーバインドに関して詳しくは以下のサイトの ウィンドウとペイン を参考にしてください
注意するべきなのはコピーしたものを貼り付けるときは C-z ]
であるという点です
また Mac のターミナルを使用している場合はデフォルトのままでは META キーとして ESC しか使えません
そこで環境設定から 設定 > キーボード
を選択して メタキーとして option キーを使用
にチェックを入れると option
キーも使えるようになります
また以下のように ~/.tmux.conf
に書いておくとコピーモードにするのに C-z C-[
,貼り付けるのに C-z C-]
となりいちいち Ctrl キーから手を離す必要がなくなって便利です
1 2 | bind -r ^[ copy-mode bind -r ^] paste -buffer |
attach/detach
tmux
では端末の状態を保存することができます
まず C-z d
をすると tmux
を起ち上げた元の端末に戻れます(detach)
その状態で
tmux ls
とすれば現在起ち上がっている tmux
のリストが表示されます
一番右に書かれている番号が0だった場合,それを開くには
tmux attach -t 0
のようにします
この操作を attach といいます
attach
は a
と省略でき,-t
以下のオプションを省略すると一番最後に作成されたものが開きます
これをうまく利用することでサーバー上の端末の状態を保つことができます
まとめ
以上のものをまとめたものを gist に貼りました
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
最近 tmux
がないと生活できなくなってきました
皆さんも tmux
ぜひ使ってみてください!!
--追記(2013/01/14)
Ubuntu には tmux
起動時に .bashrc
が実行されていないバグ?がありました
回避策を見つけたので追記します
1 2 | set -option -g default-shell /bin/bash set -option -g default- command /bin/bash |
と .tmux.conf
に追記してください
もちろん自分が普段使っているシェルに合わせてください