tmux、これだけ知っておけばおｋ（コマンド編）

こちらは以下の続きとなります。tmuxの用語・インストール方法については以下の記事を参照ください。

https://qiita.com/koin3z/items/5d923b1cd7a3ce6ca32b

この記事ではtmuxの設定ファイルでprefixの設定を行ったのち、よく使うコマンドについて紹介していきたいと思います。

:::note warn
この記事では、例えばコマンドの「`prefix + w`」の「`+`」記号は同時押しではなく、**続けて入力**を指します。一方、「`Ctrl-b`」などの「`-`」記号は**同時入力**を意味しますので、ご注意ください。
:::




# 0. prefixキーについて
tmuxは基本的に「`prefixキー` を押した後に(+) `なにかのキー`」という形で操作を行います。
デフォルトでのprefixキーは「**`Ctrl-b`**」に設定されていますが、Ctrl-bはターミナル上では左カーソル移動のショートカットとして使うため、変更されている方が多いです。あと打ちづらいですし。

私は「`Ctrl-g`」に設定していますが、ほかにも「`Ctrl-t`」「`Ctrl-c`」などお好きなキーで大丈夫です。

この設定にあたりtmuxのコマンドとは少しそれますが、ターミナルでのカーソル移動としてすでに以下のショートカットがありますので、これを被らないように設定をするといいと思います。

| コマンド | 意味 |
|:-:|:--|
|  `Crtl - a` | コマンドライン先頭に移動  |
|  `Crtl - e` | コマンドライン末尾に移動  |
|  `Crtl - f` | →（右移動）  |
|  `Crtl - b` | ←（左移動）  |
|  `Crtl - p` | ↑（上移動：コマンド履歴の表示）  |
|  `Crtl - n` | ↓（下移動：コマンド履歴の表示）  |

これらはemacsのキーバインドと一緒ですね。
上移動・下移動はtmuxのウィンドウ切り替え画面でもよく使います。

# 1. 設定ファイル `.tmux.conf`
prefixの変更をはじめとしたtmuxの設定は、ホームディレクトリ直下の`~/.tmux.conf`に記述します。インストールしただけでは作成されませんので、別途用意しておきましょう。


本記事では設定ファイルはできるだけいじらない方針でいきます。そのため設定ファイルの中身はこれだけです。

```:.tmux.conf
# prefixキーをC-bからC-gに変更
unbind C-b
set -g prefix C-g
bind C-g send-prefix

# コピーモードでのキー操作をviモードへ設定
set-window-option -g mode-keys vi
```
設定内容は2つだけです。prefixキーの変更とコピーモードのキー操作についてのみです。（コピーモードについては後述します。）

はじめはこれだけで十分だと思います。設定するプラグインによっては挙動が少し変わったり、干渉しあったりすることもあるため、私自身は最終的にこの設定だけに落ち着きました。

ほかにどのような設定があるかは以下の他の方の記事を参照してみてください。徐々にオレオレ設定にしていきましょう。



- [tmux - ArchWiki](https://wiki.archlinux.jp/index.php/Tmux)
- [とほほのtmux入門 - カスタマイズ](https://www.tohoho-web.com/ex/tmux.html#customize)
- [tmuxが快適、かつ .tmux.conf の設定 - Zenn](https://zenn.dev/murachi/articles/36d7676558d5535b44db)
- [.tmux.confの設定 - Qiita](https://qiita.com/youichiro/items/dd54c38c2f3873348c78)


# 2. 知っておくべきコマンド
タイトル通り、これだけ知っておけば大丈夫という最低限のコマンドを並べます。


## セッション関連

- **`tmux`**：
    - 新しいtmuxセッションを作成、開始します。
- **`tmux ls`**：
    - 現在作成されているセッションの一覧を表示します。複数のセッションを管理している場合に便利。
- **`tmux a -t セッション番号`**：
    - 特定のセッションに再接続します。tmux ls コマンドで取得したセッション番号を指定して使用します。
- **`prefix + d`**：
    - 現在のセッションをデタッチ（切り離し）します。セッションを終了せずにバックグラウンドに回すことができます。
- **`exit` or `Crtl - d`**：
    - セッションを終了します。
- **`tmux kill-server`**：
    - セッションをすべて終了させます。`.tmuc.conf`の設定を反映する際、tmuxを一括で終了させるときなどにも使えます。

<br>

上記のコマンドはtmux外（画面下に緑帯がない状態）で入力するものを含みます。
下のような結果が出たら、いったん`prefix + d`でデタッチするか`exit`でtmuxセッションを終了してから入力してください。
```
$ tmux
sessions should be nested with care, unset $TMUX to force
```
<br>

## ウィンドウ・ペイン関連
ペインを破棄するコマンドは別途あるのですが、`exit`で問題ないため紹介しません。

- **`prefix + %`**：
    - ウィンドウを左右に並んだ2つのペインに分割。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3761799/156de038-04ba-e16e-80f0-c1dc7d721ff9.png)
- **`prefix + "`**：
    - ウィンドウを上下に並んだ2つのペインに分割。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3761799/a6222400-e6a3-e3ea-0a74-2e890397a0a2.png)
- **`prefix + o`**：
    - 次のペインに移動します。複数のペインを使用している場合は絶対に使います。
- **`prefix + c`**：
    - ウィンドウを新規に作成します。
- **`prefix + w`**：
    - 現在作成されているセッションおよびウィンドウの一覧を表示するコマンドです。表示された一覧を上下キーで移動し、エンターキーで選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3761799/6aebcee1-7215-b77d-b269-2453512da4de.png)
    ↑赤枠が1つのセッションになり、2つのウィンドウがあることがわかります。

<br>


## コピーモード
コピーモードとは、ターミナル内でテキストを選択してコピーする機能です。右上に黄色の表示がされていることが目印です。
設定ファイルで設定したことにより、コピーモード中はviのキー操作にて画面内を自由にカーソルを移動させることができます。
マウスカーソルを使ってのコピペでも大丈夫な場合も多いですが、画面分割をしているとうまく選択できないことも多いため、覚えておくと有用です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3761799/20933f98-b77e-3798-030c-5c7f69b87e42.png)
↑左のペインがコピーモードになっている

また、tmuxは通常モードだとマウスホイールが使えないのに対し、コピーモードではカーソルをホイールで操作できるため、過去のコマンド結果を遡って閲覧したい場合にも使っています。
（もちろんマウスホイールが使えるようになるプラグインもありますが、ほかの機能と競合す可能性があります。ご注意ください。）

- **`prefix + [`**：
    - コピーモードに移行します。
- **コピーモード中に`space`**：
    - コピー対象の選択を開始するコマンドです。コピーしたいテキストの開始位置を指定します。選択を開始したら、カーソルを移動させてコピーしたい範囲を決定しましょう。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3761799/5c946e32-e5e1-d1f3-b5fc-8b861c6237a2.png)
↑コピーモードで文字列を選択
- **コピーモードで範囲を選択中に`enter`**:
    - 選択した範囲をコピーします。ペーストするには上記の`prefix + ]`です。
- **コピーモード中に`q`**：
    - コピーモードを終了します。
- **`prefix + ]`**：
    - コピーモードでコピーした内容をペーストします。

:::note info
Teratermを使用している際、クリップボードを共有できるよう、
[設定]→[その他の設定]→[制御シーケンス]画面にて、[リモートからのクリップボードアクセス]を有効化しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3761799/1e4130a5-a269-e5be-7f25-cf71c9b52526.png)
:::


<br>

## +α
追加でつかえるとより便利なコマンドです。余裕が出てきたらぜひ覚えたいコマンドです。
- **`prefix - 矢印キー`**：
    - ウィンドウ内のペインのサイズを調整します。prefixを押しながら、というところに注意してください。<br>（Teratermではこのコマンドがうまく動作しない場合があります。）
- **`prefix + 矢印キー`**：
    - 矢印キーの方向のペインに移動します。`prefix + o`では一方通行にしか移動できないため、こちらも使えるようになるとペインの移動が楽になります。
- **`prefix + z`**：
    - 現在のペインを拡大します。特定のペインを一時的に全画面表示する際に使用します。もう一度コマンドを入力すると元に戻ります。拡大中は画面左端に「*Z」と表示されるので参考にしてみてください。
- **`prefix + ,`**：
    - ウィンドウの名前（画面左下に書かれている文字）を変更します。ウィンドウが増えてきたときは名前を付けて管理しましょう。




# 3. さいごに
以上がtmuxを使う上で最低限知っておくべきコマンドです。

prefixキーを変更したように、上記のコマンドを任意のキーに設定し直すことも可能です。ウィンドウの分割とか覚えにくいですから。
ですが、まずはどんなことがtmuxでできるか、また自分はどの操作をよく使うかをまずは理解してから、徐々にオレオレ設定にしていきましょう。

この記事がtmuxを始める上で少しでも参考になれば幸いです。
ここまでお読みいただきありがとうございました。