The jonki

呼ばれて飛び出てじょじょじょじょーんき

tmuxが便利な件


tmuxが使いやすい。screenと使い方はほぼ同じだけど、CentOSだとうまく縦分割できなかったのでこっちを入れました。
メリットは下記サイトにうまくまとまっている。個人的に一番嬉しいのはメモリ消費量1/5ということ。TOPコマンドで見てみたけどRESが10m前後。まぁこんなものなのかな。

時代はGNU screenからtmuxへ

インストール

環境はCentOS 5.5 32 bitです。tmuxのページから辿ってソースを持ってきましょう。

$ wget http://downloads.sourceforge.net/project/tmux/tmux/tmux-1.3/tmux-1.3.tar.gz?use_mir
ror=jaist&ts=1280927938&r=http://tmux.sourceforge.net/
$ tar zxvf tmux-1.3.tar.gz
$ cd tmux-1.3
$ ./configure
$ make && sudo make install

これでインストールは完了!screenをソースから入れようとするとCentOSだと色々エラーが出て面倒なので諦めました。MacUbuntuなんかは問題なさそうです。

インストール時のエラー

$ make
cc -DBUILD="\"1.3\"" -std=c99 -D_GNU_SOURCE -D_POSIX_SOURCE -iquote.   -c -o attributes.o attributes.c
In file included from attributes.c:23:
tmux.h:30:19: error: event.h: No such file or directory
In file included from attributes.c:23:
tmux.h:831: error: field ‘name_timer’ has incomplete type
tmux.h:1025: error: field ‘key_timer’ has incomplete type
tmux.h:1086: error: field ‘event’ has incomplete type
tmux.h:1102: error: field ‘repeat_timer’ has incomplete type
tmux.h:1122: error: field ‘identify_timer’ has incomplete type
tmux.h:1125: error: field ‘message_timer’ has incomplete type
make: *** [attributes.o] Error 1

tmux-1.3/NOTESを見るとtmux 1.2からlibeventに依存していることが分かるのでyumで入れる。

$ sudo yum install libevent-devel   <=libeventも依存関係から入る。はず。

で、再度makeしてみると

$ make
cc -DBUILD="\"1.3\"" -std=c99 -D_GNU_SOURCE -D_POSIX_SOURCE -iquote.   -c -o tty-term.o tty-term.c
tty-term.c:24:20: error: curses.h: No such file or directory
tty-term.c:29:18: error: term.h: No such file or directory
tty-term.c: In function ‘tty_term_find’:
tty-term.c:324: warning: implicit declaration of function ‘setupterm’
tty-term.c:324: error: ‘OK’ undeclared (first use in this function)
tty-term.c:324: error: (Each undeclared identifier is reported only once
tty-term.c:324: error: for each function it appears in.)
tty-term.c:354: warning: implicit declaration of function ‘tigetstr’
tty-term.c:354: warning: assignment makes pointer from integer without a cast
tty-term.c:361: warning: implicit declaration of function ‘tigetnum’
tty-term.c:368: warning: implicit declaration of function ‘tigetflag’
tty-term.c:380: warning: implicit declaration of function ‘del_curterm’
tty-term.c:380: error: ‘cur_term’ undeclared (first use in this function)
tty-term.c: In function ‘tty_term_string1’:
tty-term.c:463: warning: implicit declaration of function ‘tparm’
tty-term.c:463: warning: return makes pointer from integer without a cast
tty-term.c: In function ‘tty_term_string2’:
tty-term.c:469: warning: return makes pointer from integer without a cast
make: *** [tty-term.o] Error 1

cursesって何やねんと調べてみるとどうやらテキストインタフェースのためのAPIツールのようなものらしい。Wikipedia ncurses
ということでncursesをインストール。

$ sudo yum install ncurses-devel  <= ncurses自体も依存関係から入る。はず。

これでmakeが通るはず。

設定 ~/.tmux.conf

これで見やすさ&使いやすさを考えてtmux.confを作成します。最初の3行でscreenでいうescapeのキーを設定してます。デフォのC-bは使いにくいんで自分はC-jにしました。
カラーの設定もとりあえず見やすくなったかと思います。

$ less ~/.tmux.conf
unbind-key C-b  
set-option -g prefix C-j
bint C-j send-prefix
set-window-option -g utf8 on
set-window-option -g mode-keys vi
set-window-option -g automatic-rename off
#color
set-option -g status-bg blue
set-option -g status-fg yellow
set-option -g history-limit 100000

よく使うコマンド

たくさんコマンドあるんですが、自分が良く使うコマンドを列挙します。
プレフィックスを変えてややこしいと思うので、プレフィックス(エスケープ)をEと表記しますね。
E-iとかかれていたら、Ctrl+j-iと思ってください。

E-c

新しいウインドウを生成します。下のステータスバーに新しいウインドウbashが生成され、アスタリスク(*)がついてアクティブになってると思います。

E-数字、E-p、E-n

ウインドウができたらウインドウ間を移動するときがあると思います。数字を押せばそのウインドウに直接移動し、p、nはpreview、nextの略(だと思う)なので1個前、後に移動します。

E-,

カンマ(,)を使うことでウインドウの名前をつけることができます。ウインドウが多くなると管理が大変なので便利です。

E-"、E-%

"はウインドウを横分割、%はウインドウを縦分割します。

E-Esc+Up、E-Esc+Down、E-Esc+Left、E-Esc+Right

ウインドウサイズを調整します。ウインドウ分割は均等に行われるので、見るものによって調整するときなんか便利です。

E-o、E-Up, Down, Left, Right

アクティブなウインドウを切り替えます。使用頻度は高いです。

E-x

アクティブなウインドウを閉じます。

E-t

時間を表示します。何となくオサレです(笑)

E-d

ウインドウをデタッチします。これは非常に便利で、自分用にカスタマイズしたウインドウなどをそのままの形で残せます。リモート上のPCでデタッチをすればローカルのターミナルを落としても、リモートマシン上でtmuxが動き続けるので、翌朝またPCを立ち上げて、アタッチすることにより簡単に作業の続きが行えます。
tmuxを立ち上げるときに tmux ls でtmuxウインドウの存在を確認し、tmux a でアタッチし繋げることができます。

文字の説明だけど分かりにくいと思うので実際にデタッチ、アタッチをしてみると良いです。
この流れは下記サイトが分かりやすいです。tmuxではなくscreenですがコマンドキーが違うだけでやっている内容は一緒です。
GNU screen で仮想端末。処理をほったらかしにして切断、さあ帰ろう

E-?

コマンドリストを表示します。今回説明したもの以外にも数多くあるのでいろいろ探ってみると良いと思います。


以上です。