【tmuxとは】便利な使い方とチートシート紹介【Emacs設定】

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

実はターミナルを Emacs っぽく扱えるようにすることができます。
しかも、いつでも前回の状態から作業を再開できます。

それを可能にするライブラリは tmux 。名前も Emacs に似てますね。
今回は tmux の使い方をわかりやすく解説します!

tmux を使うにあたって、まず Emacs に慣れておいた方がいいと思います。
Emacs 初心者記事も公開しているので、興味がある人はこちらをどうぞ。

tmux とは

tmux は端末多重化ソフトウェアとかいうよくわからない言葉で説明されます。
が、そんな単語はムシしてください。

tmux は単に Emacs (または Vim) の操作感でターミナルを扱えるようにするライブラリです。
セッション単位、ウインドウ単位で切り替えたり、ペインで上下左右分割できたりします。

そして一番のメリットは「いつでも前回の状態から作業を再開できる」ことです。
他のサーバでも tmux がインストールされていれば SSH 経由で tmux を扱うことができます。

tmux インストール

Mac の場合

brew install tmux

【conf】Emacs 風キーバインドの tmux 設定ファイル

同じ設定ファイルを使っていれば、どの環境でも同じように tmux が動作します。
設定ファイルはホームディレクトリに .tmux.conf を作成してください。

# emacs で ~/.tmux.conf を作成
emacs ~/.tmux.conf

以下の前提で設定ファイルを作成しました。
必要に応じてコメントアウトを付けたり外したりしてみてください。

  • シェルは zsh を使っています
  • ターミナルクライアントは iTerm2 を使っています
  • Emacs 風のキーバインドにしています
  • prefix は C-z に変更しています
###############################################################
# シェルの設定
###############################################################

# tmux 起動時のシェルを /bin/zsh にする
set -g default-shell /bin/zsh

# /usr/local/bin/zsh を使っている場合
# set -g default-shell /usr/local/bin/zsh

###############################################################
# prefix キーバインド変更 ※デフォルトは C-b
###############################################################

# prefix を C-z に変更する
set -g prefix C-z
bind-key C-z send-prefix
unbind-key C-b

# prefix C-b を解除
unbind C-b

###############################################################
# Emacs 風キーバインド
###############################################################

# setw -g mode-keys vi
setw -g mode-keys emacs

# prefix C-z でコピーモードに入る
bind-key C-z copy-mode
# prefix C-y でペーストする
bind-key C-y paste-buffer
# PageUp => 1ページ遡ってコピーモードに入る: ログを見る時など便利
bind -n Pageup copy-mode -u

unbind 1
unbind ^C
unbind &

# prefix 0 現在のペインを削除
bind 0 kill-pane
# prefix 1 ウインドウ内の現在のペインを残し、他のペインをウインドウにする
bind 1 break-pane
# prefix 2 ウインドウを横に分割
bind 2 split-window -v
# prefix 3 ウインドウを縦に分割
bind 3 split-window -h
# prefix o ペインをローテート
bind o select-pane -t :.+
# prefix k ウインドウを削除
bind k kill-window
# prefix C-k ペインを削除
bind C-k kill-pane
# prefix i
bind i display-panes
# prefix C-t
bind C-t next-window
# prefix c
bind c  new-window

###############################################################
# vim 風キーバインド
###############################################################

# vim のキーバインドでペインを移動する
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# vim のキーバインドでペインをリサイズする

bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

###### Vim コピーモード ######

# 'v' で選択を始める
# bind -T copy-mode-vi v send -X begin-selection

# 'V' で行選択
# bind -T copy-mode-vi V send -X select-line

# 'C-v' で矩形選択
# bind -T copy-mode-vi C-v send -X rectangle-toggle

# 'y' でヤンク
# bind -T copy-mode-vi y send -X copy-selection

# 'Y' で行ヤンク
# bind -T copy-mode-vi Y send -X copy-line

###############################################################
# キーバインド
###############################################################

# 番号基準値を変更
set -g base-index 1

# マウス操作を有効にする
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"

###############################################################
# 色・見た目
###############################################################

# ステータスバーを 1 秒毎に描画し直す
set -g status-interval 1

# センタライズ (主にウインドウ番号など)
set -g status-justify centre

# ステータスバーをトップに配置する
set -g status-position top

# ステータスバーをトップに配置する
set -g status-position top

# 左右のステータスバーの長さを決定する 
set -g status-left-length 90
set -g status-right-length 90

# #P => ペイン番号を最左に表示
set -g status-left '#H:[#P]'

# 現在時刻を最右に表示
set -g status-right '[%y-%m-%d(%a) %H:%M]'

# センタライズ(主にウインドウ番号など)
set -g status-justify centre

# ステータスバーの色を設定する
set -g status-bg "colour238"
set -g status-fg "colour255"

# tmuxを 256 色表示できるようにする
set -g default-terminal xterm-256color
set -g terminal-overrides 'xterm:colors=256'

###############################################################
# iTerm2 設定
###############################################################

# tmux ウインドウタイトルを iTerm2 タブ/ウインドウのタイトルに表示する
set-option -g set-titles on
set-option -g set-titles-string '#T'

設定の反映は tmux source ~/.tmux.conf もしくは tmux kill-server を実行してください。

iTerm2 の tmux 連携

コピーを許可する設定
他サーバの tmux セッションを使う設定

tmux の使い方・チートシート

tmux コマンド

起動コマンド

# 新規セッションで tmux 起動する
tmux

# 新規セッション名をつけて tmux 起動する場合
tmux new -s セッション名

# ctrl D でセッションから抜けることが可能

複数のセッションを立ち上げて、セッション単位で切り替えしたい場合は prefix d で抜けてから tmux 起動することで別のセッションが立ち上がります。

自動的に tmux が起動するようにする

毎回 tmux を起動するのは面倒です。
なので、シェル設定ファイルに tmux 起動コマンドを書いておいた方がいいですよ。

# ~/.zshrc などに追記する
if [ $SHLVL = 1 ]; then
   tmux
fi

その他、よく使う tmux コマンド

  • tmux ls
    • セッション一覧
  • tmux a
    • セッションを再開する
    • tmux a -t セッション名
      • 指定したセッションで再開する
  • tmux kill-session
    • 現在のセッション終了
    • tmux kill-session -t セッション名
      • 指定したセッションを終了する
    • prefix d でも現在のセッション終了になる
      • ⌃ d だと tmux そのものが終了するので注意
  • tmux kill-server
    • tmux 全体を終了する
      • すべてのセッションが終了する
    • これを実行しない限り、ターミナルを落としてもセッションが生き続ける

prefix コマンド

prefix と呼ばれるものがあります。Emacs でいうところの C-x に相当するものです。

  • デフォルトは C-b が割り当てられている
  • .tmux.conf 内で変更可能
    • 先ほどの設定ファイルでは prefix を C-z に割り当てました
  • prefix のあとに特定コマンドを入力すると、対応するショートカットが動作する
  • いつでも実行できます
    • たとえば Emacs 起動中に prefix c でウインドウ切り替えなども可能

先ほど紹介した設定ファイルが前提の prefix コマンドを紹介します。

すべての prefix コマンドを確認する

  • ?
    • キーバインド一覧を表示する

セッションに関する prefix コマンド

  • prefix s
    • select
    • セッションを選択する
  • prefix d
    • detach
    • 現在のセッションから離脱する
    • ⌃ d だと tmux そのものが終了するので注意
  • prefix $
    • セッション名を変更する
    • tmux new -s セッション名 でセッション起動してなかった場合

ウインドウに関する prefix コマンド

  • prefix c
    • create
    • 新規ウインドウ作成
  • prefix w
    • window
    • ウインドウを選択する
    • すべてのセッションのウインドウが表示される
  • prefix C-K
    • kill
    • ウインドウの破棄
  • prefix n
    • next
    • 次のウインドウへ移動
  • prefix p
    • previous
    • 前のウインドウへ移動
  • prefix '
    • 入力番号のウインドウに移動する
  • prefix .
    • 入力番号のウインドウ番号に変更する
  • prefix ,
    • ウインドウ名を変更する
  • prefix f
    • ウインドウ名で検索する

ペインに関する prefix コマンド

  • prefix 0 または prefix C-k または prefix x
    • 現在のペインを削除する
  • prefix 1 または prefix !
    • ウインドウ内の現在のペインを残し、他のペインをウインドウにする
  • prefix 2
    • 上下にペイン分割 (横に分割)
  • prefix 3
    • 左右にペイン分割 (縦に分割)
  • prefix q または prefix i
    • ペイン番号を一瞬表示する
  • prefix カーソル
    • 指定方向のペインへ移動 ※連続押しでプレフィックス継続
  • prefix C-カーソル
    • ペインのサイズを変更 ※連続押しでプレフィックス継続
  • prefix o
    • ペインを順に移動
  • prefix ;
    • 以前のペインへ移動
  • prefix z
    • 現在のペインを最大化/復帰
  • prefix スペース
    • レイアウトを変更
  • prefix M-1-5
    • レイウトを変更
    • M は option ※ Mac の場合
  • prefix {
    • ペインの入れ替え(前方向)
  • prefix }
    • ペインの入れ替え(後方向)
  • prefix C-o
    • ペインの入れ替え(全体)
  • prefix t
    • ペインに時計を表示

コピーモードに関する prefix コマンド

  • prefix C-z
    • コピーモード開始
    • カーソルキーで自由に移動
    • C-@
      • コピー範囲の選択開始
    • C-w
      • コピー実行
  • prefix C-y
    • ペーストモード開始
    • コピーした内容を貼り付け

ターミナルが起動しない事象が起きたら

ターミナル (iTerm2) がフリーズして起動しなくなる場面に遭遇しました。。。
Tmux セッションデータがおかしくなった可能性があるそうです。

そんなときは Finder で Macintosh HD にある /tmp/tmux-501 を削除してみてください。
僕はこれで解決しました。

関連記事

お仕事ください!

僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。
なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。

カテゴリ「Develop」の最新記事

最新記事

コメント

コメントを残す

*