こんにちは。iQeda [@iQeeeda] です。
実はターミナルを 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 連携
- 参考) ssh + iTerm2 tmux統合で切断しても再開できるリモート環境を作る – Qiita
- リモート環境の 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 全体を終了する
- すべてのセッションが終了する
- これを実行しない限り、ターミナルを落としてもセッションが生き続ける
- tmux 全体を終了する
prefix コマンド
prefix と呼ばれるものがあります。Emacs でいうところの C-x
に相当するものです。
- デフォルトは
C-b
が割り当てられている .tmux.conf
内で変更可能- 先ほどの設定ファイルでは prefix を
C-z
に割り当てました
- 先ほどの設定ファイルでは prefix を
- prefix のあとに特定コマンドを入力すると、対応するショートカットが動作する
- いつでも実行できます
- たとえば Emacs 起動中に
prefix c
でウインドウ切り替えなども可能
- たとえば Emacs 起動中に
先ほど紹介した設定ファイルが前提の 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」の最新記事
コメント