CLOVER🍀

That was when it all began.

tmuxを覚えてみる

これは、なにをしたくて書いたもの?

Ubuntu Linuxで、ターミナルにはTerminatorを使っているのですが。

Terminator

時々、タブとウィンドウ分割が増えすぎることもあるので、そろそろtmuxを覚えてみようかなと。

tmux

tmuxは、ターミナルマルチプレクサと呼ばれるものです。

GitHub - tmux/tmux: tmux source code

端的にはひとつの端末から、複数のターミナルを作成したり、制御できるソフトウェアです。

tmuxを起動するとセッションとひとつのウィンドウが立ち上がり、ウィンドウを増やしたり、ペインで分割したり。
セッション自体も追加できたりします。

今回は、主にインストールとキー操作を覚えていくことにします。

インストール

今回の環境。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal


$ uname -srvmpio
Linux 5.4.0-89-generic #100-Ubuntu SMP Fri Sep 24 14:50:10 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

tmuxのインストール自体は、aptで簡単に済みます。

$ sudo apt install tmux


$ tmux -V
tmux 3.0a

また、あとでクリップボードに関する設定をするためにxselもインストールしておきます。

$ sudo apt install xsel


$ xsel --version
xsel version 1.2.0 by Conrad Parker <conrad@vergenet.net>

コマンド

こういうのは、慣れて覚えていく感じだと思うので、コマンドをまとめていきます。

tmuxは、起動後はprefixと呼ばれるキーを入力後にコマンド操作をするようです。デフォルトでは、Ctrl-bです。
以降、prefixの入力については<prefix>と表現することにします。

tmux

セッションの開始。

$ tmux


$ tmux new -s [セッション名]
$ tmux new-session -s [セッション名]

セッション一覧。

$ tmux ls

セッションにアタッチ。

$ tmux a -t [セッション名]

セッションを終了する。

$ tmux kill-session


$ tmux kill-session -t [セッション名]

セッションをすべて終了する。

$ tmux kill-server

コマンド一覧。

$ tmux list-keys
セッション操作
操作(キーバインド) 説明
<prefix>, s セッション一覧を表示
<prefix>, d 現在のセッションからデタッチ
<prefix>, $ 現在のセッションの名前を変更
ウィンドウ操作
操作(キーバインド) 説明
<prefix>, c 新規ウィンドウ作成
<prefix>, w ウィンドウ一覧を表示(セッション一覧から現在のセッションを選択した状態になったもの)
<prefix>, n 次のウィンドウへ移動
<prefix>, p 前のウィンドウへ移動
<prefix>, l 以前のウィンドウへ移動
<prefix>, , 現在のウィンドウの名前を変更
<prefix>, & 現在のウィンドウを破棄
<prefix>, f ウィンドウの名前検索
ペイン操作
操作(キーバインド) 説明
<prefix>, " 上下分割
<prefix>, % 左右分割
<prefix>, [カーソルキー] 指定したペインへ移動
<prefix>, o 次のペインへ移動
<prefix>, ; 以前のペインへ移動
<prefix>, { 前のペインと位置を入れ替え
<prefix>, } 後ろのペインと位置を入れ替え
<prefix>, x 現在のペインを破棄
<prefix>, ! 現在のペインをウィンドウ化
コピー操作
操作(キーバインド) 説明
<prefix>, [ コピーモード開始
(コピーモード中)space 範囲指定開始

クリップボードへのコピーは後述。

その他
操作(キーバインド) 説明
<prefix>, ? コマンド一覧の表示

.tmux.confファイルで設定を行う

$HOME/.tmux.confで設定が行えるようです。

$HOME/.tmux.conf

set -g history-limit 20000

bind-key c new-window -c "#{pane_current_path}"

set -g mouse on
bind-key -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind-key -n WheelDownPane select-pane -t= \; send-keys -M

bind-key -T copy-mode Enter send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
bind-key C-y run "xsel -o | tmux load-buffer - ; tmux paste-buffer"

今回は、以下をやっておきました。

  • 履歴の拡張(デフォルトでは2,000)
  • 新しいウィンドウは、現在のディレクトリをカレントディレクトリとして開始する
  • マウスでのスクロールを有効に
    • デフォルトではマウススクロールはコマンド履歴の移動
  • マウスホイールで上に戻るとコピーモードへ、戻り切るとコピーモードの解除へ
  • コピーモードの開始後、Enterでxselを使ってコピー内容をクリップボードへ反映

なお、マウススクロールを有効にすると、今度はマウスクリックが効かなくなるので、コピーをしたい場合は
shiftキーを押しながらになります。

参考

tmux(1) - Linux manual page

tmux - ArchWiki

tmuxチートシート - Qiita