zsh, tmux, vimで構築する快適なCUI環境 2/3 「tmux」編
tmux(ティーマックス)は、一つのターミナルウィンドウ内で仮想的に複数のウィンドウを切り替えて使用することができる仮想端末管理ツールです。
同様の機能を持つツールとしてscreenが広く使われてきましたが、現在はより高機能・省メモリなtmuxが人気を集めています。
tmuxはscreenと比較し、主に以下のような特徴があります。
- ウィンドウタイトルの自動変更に対応
(最終実行コマンド名をウィンドウタイトルとして表示できる) - コピーモードのコピー履歴を複数保持し、一覧から選んでペースト可能
- ウィンドウを上下・左右に分割可能
環境構築の準備
tmuxの最新版(1.6)パッケージはRPMForgeリポジトリからインストールします。yumのサードパーティ製リポジトリ追加手順については以下のページが参考になります。
私の方で実行した内容は以下のとおりです。(EPELリポジトリはmoshをインストールする場合などに使用します。moshについては別の機会に紹介します。)
$ sudo cp -p /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
$ sudo vim /etc/yum.repos.d/CentOS-Base.repo
priority=1を追加
$ sudo rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
$ sudo rpm -ivh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
$ sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
$ sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm
$ vim /etc/yum.repos.d/rpmforge.repo
$ vim /etc/yum.repos.d/epel.repo
enabled=1を確認
tmuxのセットアップ
tmux インストール
前述のとおり、yumにRPMForgeリポジトリを追加することでパッケージがインストールできます。
$ sudo yum install tmux
tmux 使い方
tmuxコマンドでtmuxが起動します。
よく使いそうな起動オプションとしては以下が挙げられます。
list-sessions | 全セッションを列挙
attach | 最後にデタッチしたセッションに接続
attach-session [-t target-session] | 指定したセッションに接続
tmux上の操作は基本的に、プレフィックスキー(標準ではC-b)を押した後にキーを入力する2ストローク操作になります。
標準のキー設定はlist-keysで確認することができます。よく使いそうなキー操作としては以下が挙げられます。(ウィンドウの分割は個人的にあまり使わないので、ここでは省いています。)
■ウィンドウとペイン
c | new-window | 新しいウィンドウを作成
n | next-window | 次のウィンドウへ移動
p | previous-window | 前のウィンドウへ移動
[ | copy-mode | コピーモードに入る
■クライアントとセッション
d | detach-client | カレントクライアントをデタッチ
■バッファ
= | choose-buffer | バッファをリストから対話的に選択
] | paste-buffer | ペーストバッファの内容をカレントウィンドウに挿入
■その他
: |command-prompt | コマンドプロンプトを開く
? |list-keys | キーバインドを列挙
■コピーモード(vi)
space |始点選択
enter |終点選択
標準の全キー操作を以下にまとめました。
tmux 設定
tmuxの設定を行います。
$ vim ~/.tmux.conf
#+----------------------------------------------------------------------------------------+
# セッションオプション
#+----------------------------------------------------------------------------------------+
#新しいウィンドウのベース番号
set-option -g base-index 1
#全てのベルを無視
set-option -g bell-action none
#各セッションで保持するバッファ数
#set-option -g buffer-limit 20
#256色端末を使用
set-option -g default-terminal "screen-256color"
#ウィンドウ履歴で保持される最大行数
set-option -g history-limit 5000
#Escapeキー入力時の待ち時間(0.5秒)をキャンセル
set-option -s escape-time 0
#+----------------------------------------------------------------------------------------+
# ステータスライン
#+----------------------------------------------------------------------------------------+
#status-left 及び status-right の非ASCII文字をUTF-8として扱う
set-option -g status-utf8 on
set-option -g status-left '#[fg=white,bg=blue][S:#S]#[default]'
set-option -g status-right '#[fg=black,bg=cyan][CPU=#(getCpuUsage.sh) MEM=#(getMemUsage.sh)]#[fg=white,bg=blue][%Y/%m/%d(%a)%H:%M]#[default]'
set-option -g status-right-length 50
set-option -g status-fg white
set-option -g status-bg black
set-window-option -g window-status-fg blue
set-window-option -g window-status-bg black
set-window-option -g window-status-current-fg white
set-window-option -g window-status-current-bg blue
#+----------------------------------------------------------------------------------------+
# ウィンドウオプション
#+----------------------------------------------------------------------------------------+
#ウィンドウを実行コマンド名で自動リネーム
set-window-option -g automatic-rename on
#スクロールモード、コピーモード、選択モードで vi のキーバインドを使う
set-window-option -g mode-keys vi
#ウィンドウで動作があるとステータスラインでハイライト
set-window-option -g monitor-activity on
#UTF-8 シーケンスが現れることに備える
set-window-option -g utf8 on
#+----------------------------------------------------------------------------------------+
# キーバインド
#+----------------------------------------------------------------------------------------+
#プレフィックスキーを設定
set-option -g prefix C-z
unbind-key C-b
bind-key C-z send-prefix
#C-Right,C-Leftでウィンドウ切り替え
#* Ctrl and arrow keys doesn't work in putty! What do I do?
#http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/FAQ
set -g terminal-overrides "xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@:colors=256"
bind-key -n C-Right next-window
bind-key -n C-Left previous-window
#コピーモードに入る
bind-key y copy-mode
#ペーストバッファの内容をカレントウィンドウに挿入
bind-key p paste-buffer
#Yで一行コピー
#http://blog.m4i.jp/entry/2012/02/13/155233
bind-key -t vi-copy Y copy-line
#~/.tmux.conf をリロード
bind-key r source-file ~/.tmux.conf; display "Reloaded!"
#ペインを水平・垂直分割
bind-key s split-window -h
bind-key v split-window -v
#h,j,k,lでペインを切り替え
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
ステータスラインにCPUとメモリの使用率を表示するために下記スクリプトを使用しています。
$ vim ~/bin/getCpuUsage.sh
#!/bin/bash
top -bn1 | grep "^Cpu(s)" | sed "s/.*, *\([0-9.]*\)%id.*/\1/" | awk '{printf ("%3d%\n", 100 - $1 + 0.5)}'
$ vim ~/bin/getMemUsage.sh
#!/bin/bash
free | grep "^Mem:" | awk '{printf ("%3d%\n", (($3 / $2) * 100) + 0.5)}'
$ chmod u+x ~/bin/getCpuUsage.sh ~/bin/getMemUsage.sh
設定後の画面表示は以下のようになります。
256色表示を使用したい場合、The 256 color mode of xtermの256colors2.plで表示を確認しておきましょう。256色表示できればステータスラインでもcolour0~colour255が使用できます。
自動再アタッチの設定
以下の設定を~/.zshrcに追加することで、ログイン時にセッションが存在した場合、自動的にアタッチすることができます。
#Start tmux on every shell login
#https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
if which tmux 2>&1 >/dev/null; then
#if not inside a tmux session, and if no session is started, start a new session
test -z "$TMUX" && (tmux attach || tmux new-session)
fi
なお、この設定はscreenを起動することを考慮していないため、この設定状態でscreenを起動しないよう注意して下さい。(screenの内側でtmuxを起動してしまいます)
参考ページ
整理できていませんが、参考にさせてもらったページは以下のとおり。
- 時代はGNU screenからtmuxへ - Dマイナー志向
- screen? tmux? byobu? - GeekなNooblog
- GNU Screen ライクなターミナルマルチプレクサ「tmux」を使う - えこ日記
- Ubuntu Weekly Recipe:第127回 ターミナルマルチプレクサ tmuxを使ってみよう|gihyo.jp … 技術評論社
- Manpage of TMUX
- screenからtmuxに乗り換えたら快適!(二点除く) - 凡人プログラマ
- screen(だけ)の時代は終わり。tmuxでリモートコンソールを便利に使うTips : アシアルブログ
- オデの日記@WEB系: screenをやめてtmuxへ
- screenの次はtmuxらしい。tmuxの優しい育て方。 - 進・日進月歩
- dotfiles/.tmux.conf at master ・ harajune/dotfiles ・ GitHub
- iTerm2 + zsh + tmux + vim で快適な256色ターミナル環境を構築する - ゆるよろ・オブ・ザ・( ;゚皿゚)ノシΣ フィンギィィーーッ!!! 日記
- Command Lineで使用しているツールまとめ #Vim #Zsh #tmux #Mac #command - Qiita
- Terminal Multiplexer(tmux)の紹介|サイバーエージェント 公式エンジニアブログ
- hollyなblog:tmuxメモ その2
- tmux での1行コピー または man tmux に載っていないコマンド - カワイイはつくれる
- .tmux.confをごにょごにょする - mizchi log
- Code inComplete - Sharpening Tools with TMUX
- tmux.svn.sourceforge.net/viewvc/tmux/trunk/FAQ
- software:terminal:tmux [kynan's wiki]
- tmuxの使い方メモ - ヌキのやる気のないエンジニアブログ
- tmux の導入と諸設定 メモ - Log4jpnLog
- tmuxを使ってみる - い~さねっと
- Macでtmuxのステータスラインに起動時間/ロードアベレージ/メモリ使用率を表示 - よんちゅBlog
- bash - How to get overall CPU Usage (e.g. 57%) on Linux - Stack Overflow
- Showing CPU/Memory usage on tmux status bar(tmuxのステータスバーにCPUとMemoryの使用状況を表示する)
- 端末の中で仮想端末を管理するtmux(GNU screenの代替)について(概要・実行・操作) - 試験運用中なLinux備忘録
- tmux + vim で256色 - shimobayashiの日記
おわりに
現在まだscreenをお使いの方には、tmuxへの移行をおすすめしておきます。
次回はVimの設定について紹介します。
VPSセットアップ関連記事
- 無料VPS HOST1FREEの使い方
- Linux VPSの基本的なセキュリティ設定
- zsh, tmux, vimで構築する快適なCUI環境 1/3 「zsh」編
- zsh, tmux, vimで構築する快適なCUI環境 2/3 「tmux」編
- zsh, tmux, vimで構築する快適なCUI環境 3/3 「Vim」編
- PuTTY設定覚え書き
- WindowsのCygwin環境でmoshを使ってみた