Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

tmuxの導入とよく使うコマンドまとめ

こんばんは。

tmuxをご存知でしょうか?
自分は知ってはいたのですが使い方がよく分からず、使っていませんでした。
しかし、その便利さに気がついてからはもう必須となりました。
sshしているときに複数のターミナル(画面)を使いたい時も便利ですし(OS X Mavericksではタブ機能がありますが新規タブを開くといちいちsshをし直さなくてはいけません)、何よりセッションで状態を残したままにできるのが非常に便利です。

今回はそんなtmuxをMacでも使いたいと思い導入してみたので、その手順とよく使うコマンドをまとめておきます。
コマンドは自分がよく忘れるので・・・

tmuxのインストール

macの場合はbrewコマンドで導入出来ます。
CentOSの場合は少し面倒くさいようなので、ググってみてください。

brew install tmux

tmuxの設定

設定は~/.tmux.confに書きます。
色々参考にし、以下のようにしました。

# プレフィックス(tmuxモードにするキー)を Ctl-b から Ctl-t に変更
unbind C-b
set -g prefix C-t

# set UTF-8
setw -g utf8 on
set -g status-utf8 on

# ESCキーの反応を早く(デフォルトだと少しラグがある)
set -s escape-time 0

# マウスを使えるように(Terminal.appだとこれやってもマウスでスクロール出来ないみたいです・・・)
setw -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on

# ウィンドウの開始番号を1からにする(デフォルトは0から)
set -g base-index 1
# ペインの開始番号を1からにする(デフォルトは0から)
setw -g pane-base-index 1

# アクティビティなウィンドウをハイライト表示
setw -g monitor-activity on

#### キーバインドの設定
# プレフィックスキー r で設定ファイルをリロード
bind r source-file ~/.tmux.conf \; display "Reloaded!"

## ペイン関係
# | キーで縦に分割
bind | split-window -h
# - キーで横に分割
bind - split-window -v

# ペイン間の移動をvim風に
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

## コピーモード
# viキー風のコピーモードにする
setw -g mode-keys vi

# クリップボードを共有(tmuxでコピーしたものをMacのクリップボードにコピー出来るように)
set -g default-command "reattach-to-user-namespace -l bash"
# コピーモードをviキーに設定する
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

上記ではreattach-to-user-namespaceを使っているのでbrewでインストールします。

brew install reattach-to-user-namespace

設定は他にもしたほうが良いものがあるかもしれませんがとりあえず。。

tmuxの使い方

使い方の前に、設定ファイル中にも出てきたウィンドウとペインについて書いておきます。
tmuxはタブ分割のように複数の端末画面を持つことが出来ます。その一つひとつの端末(タブ)がウィンドウです。
ペインは、ウィンドウ中で分割できる画面のことです。
また、tmuxはウィンドウ毎のユーザの状態をセッションで管理します。そのセッションを残したり復元したりするのがデタッチ、アタッチです。

それを踏まえた上でtmuxの基本的なコマンドを見ていきます。
なお、ここでのプレフィックスキーは上で設定した通り C-t となります。

コマンド 説明
tmux tmuxを起動(セッション作成)
tmux new -s セッション名 セッションに名前をつけてtmuxを起動
PREFIX c 新規ウィンドウを作成
PREFIX n 次のウィンドウに移動
PREFIX p 前のウィンドウに移動
PREFIX 数字 指定した数字のウィンドウに移動
PREFIX w ウィンドウ一覧を表示(C-n, pで選び、Enterで決定)
PREFIX ,(カンマ) ウィンドウ名変更
exit ウィンドウを終了
PREFIX |(%) ペインを縦に分割(デフォルトは%)
PREFIX -(") ペインを横に分割(デフォルトは")
PREFIX h,j,k,l ペインを移動(デフォルトはo)
PREFIX ! ペイン分割を解除
PREFIX [ コピーモード(上記の設定をしていれば、この後Vimと同じ操作でコピーが出来ます)
PREFIX ] 貼り付け
tmux ls セッションリスト表示
tmux rename -t 変更前セッション名 変更後セッション名 セッションの名前を変更
PREFIX d デタッチ(セッションを切り離し)
tmux a -t セッション名 デタッチしたセッションをアタッチ(再度繋げる)。セッション名を指定しない場合は最後に作成されたセッションをアタッチ)
tmux kill-session -t セッション名 セッションの削除
tmux kill-server tmuxを終了(セッションも消される)

以上です。
tmux本当に便利です。
今回はMacに入れましたが、特にSSHでリモートサーバに入っている時が本当に便利です。
これから積極的に使っていきたいと思います。

参考にさせていただいたサイト

tmuxのすすめ | catatsuyのBlog
達人に学ぶ.tmux.confの基本設定 - Qiita
tmuxのインストールと設定 - Qiita
tmux基本のコマンド — nato's memo 1.0 documentation
Bash - tmuxを使いこなそう(ウインドウ、ペイン、セッション、アタッチ、デタッチ) - Qiita
tmuxとMacのクリップボードを共有する(copy-mode, vim) - Qiita