これは、なにをしたくて書いたもの?
Ubuntu Linuxで、ターミナルにはTerminatorを使っているのですが。
時々、タブとウィンドウ分割が増えすぎることもあるので、そろそろtmuxを覚えてみようかなと。
tmux
tmuxは、ターミナルマルチプレクサと呼ばれるものです。
GitHub - tmux/tmux: tmux source code
端的にはひとつの端末から、複数のターミナルを作成したり、制御できるソフトウェアです。
tmuxを起動すると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>, & | 現在のウィンドウを破棄 |
| <prefix>, f | ウィンドウの名前検索 |
| <prefix>, [数字] | 指定の番号のウィンドウへ移動 |
ペイン操作
| 操作(キーバインド) | 説明 |
|---|---|
| <prefix>, " | 上下分割 |
| <prefix>, % | 左右分割 |
| <prefix>, [カーソルキー] | 指定したペインへ移動 |
| <prefix>, o | 次のペインへ移動 |
| <prefix>, ; | 以前のペインへ移動 |
| <prefix>, { | 前のペインと位置を入れ替え |
| <prefix>, } | 後ろのペインと位置を入れ替え |
| <prefix>, x | 現在のペインを破棄 |
| <prefix>, ! | 現在のペインをウィンドウ化 |
コピー操作
| 操作(キーバインド) | 説明 |
|---|---|
| <prefix>, [ | コピーモード開始 |
| (コピーモード中)space | 範囲指定開始 |
クリップボードへのコピーは後述。
ヘルプ
| 操作(キーバインド) | 説明 |
|---|---|
| <prefix>, ? | コマンド一覧の表示 |
サブコマンド
ウィンドウを入れ替える。
$ tmux swap-window -s [入れ替え元のウィンドウ番号] -t [入れ替え先のウィンドウ番号] # または $ tmux swapw -s [入れ替え元のウィンドウ番号] -t [入れ替え先のウィンドウ番号]
-sを省略すると、現在のウィンドウと入れ替えます。
ペインを入れ替える。
$ tmux swap-pane -s [入れ替え元のペイン番号] -t [入れ替え先のペイン番号] # または $ tmux swapp -s [入れ替え元のペイン番号] -t [入れ替え先のペイン番号]
-sを省略すると、現在のペインと入れ替えます。
tmuxサーバーを複数起動する
以下のコマンドを実行した時、tmuxサーバーが起動します。
$ tmux $ tmux new -s [セッション名] $ tmux new-session -s [セッション名]
この時、/tmp/tmux-[PID]ディレクトリー配下にUNIXドメインソケットが作られ、このサーバーに紐づくセッションを
操作することになります。デフォルトでは/tmp/tmux-[PID]/defaultです。
tmuxサーバー自体を分けたい場合は、以下のように-L [ソケット名]でソケットファイル名を指定します。
$ tmux -L [ソケット名] $ tmux -L [ソケット名] new -s [セッション名] $ tmux -L [ソケット名] new-session -s [セッション名]
これで指定した名前でUNIXドメインソケットが作成され(/tmp/tmux-[PID]/[ソケット名])、別のtmuxサーバーを立ち上げる
ことができます。
.tmux.confファイルで設定を行う
$HOME/.tmux.confで設定が行えるようです。
$HOME/.tmux.conf
set -g default-terminal "tmux-256color"
set-option -g renumber-windows on
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キーを押しながらになります。