> For the complete documentation index, see [llms.txt](https://kanneg881.gitbook.io/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kanneg881.gitbook.io/workspace/zhong-duan/tmux/pei-zhi-tmux.md).

# 配置 tmux

## 說明

當啟動 tmux 伺服器，tmux 在使用者的家目錄中運行一個名為 \
.tmux.conf 的文件。 該文件包含按順序執行的 tmux 命令列表\
請務必注意 .tmux.conf 僅在啟動伺服器時運行\
而不在創建新會話時運行

可以使用 source-file 命令從 .tmux.conf 或正在運行的 tmux 伺服器\
運行不同的配置文件，例如使用命令提示符從正在運行的\
伺服器再次運行 .tmux.conf

```
:source ~/.tmux.conf
```

配置文件中的命令每行顯示一個\
以＃開頭的任何行都是註釋，將被忽略

```
# 這是一個註解 - 下面的命令為關閉狀態欄
set -g status off
```

## 使用滑鼠

`:set -g mouse on`\
打開滑鼠命令提示\
它可用於更改活動中窗格或窗口，調整窗格大小\
複製內容或從菜單中選擇項目

### 滑鼠操作說明

* 在窗格按左鍵切換活動中的窗格
* 在狀態欄的窗口名稱按左鍵切換窗口
* 按左鍵拖曳窗格邊距調整大小
* 在窗格內拖曳左鍵選取文字\
  放開滑鼠時複製選取的文字
* 在窗格按右鍵打開一個包含各種指令的選單\
  當釋放滑鼠後，選取的命令會在目標光格中運行\
  每一個選單項目也有一個快捷鍵顯示在括號中
* 在狀態欄的窗口或會話的名稱按右鍵打開一個\
  類似的選單給窗口或會話使用

## 快捷鍵綁定

使用 `bind-key` 和 `unbind-key` 命令可以更改 tmux 快捷鍵綁定\
tmux 中的每個快捷鍵綁定都屬於一個命名的快捷鍵表\
有四個預設的快捷表：

* root(根) 表包含不帶前綴鍵的快捷鍵綁定
* prefix(前綴) 表包含在前綴鍵按下之後的快捷鍵綁定\
  就像[進入到 tmux 的快捷鍵](/workspace/zhong-duan/tmux/jin-ru-dao-tmux-de-kuai-jie-jian.md)提到的那樣
* copy-mode(複製模式) 表包含使用 emacs(1)-style 的按鍵\
  在復制模式下使用快捷鍵綁定。
* copy-mode-vi 表包含使用 vi(1)-style 的按鍵\
  在復制模式下使用快捷鍵綁定。

可以使用 `list-keys` 命令列出所有的快捷鍵綁定或\
單個表的快捷鍵綁定。預設情況下，這會將按快捷鍵顯示為\
一系列的 bind-key 命令。\
-T 標誌 要顯示的快捷鍵表\
-N 標誌 顯示快捷鍵幫助，像是 `C-b？` 快捷鍵綁定

**作者在輸入 -N 時，已經變成非法的選項了**

例如，僅列出 prefix 表中的快捷鍵

```
$ tmux lsk -Tprefix
bind-key    -T prefix C-b     send-prefix
bind-key    -T prefix C-o     rotate-window
...
```

或者

```
$ tmux lsk -Tprefix -N
C-b     Send the prefix key
C-o     Rotate through the panes
...
```

綁定 `C-b M-0` 快捷鍵為選擇窗口 10

```
bind M-0 selectw -t:=10
```

取消綁定快捷鍵 `C-b M-0`

```
unbind M-0
```

更進一步綁定的部分在[手冊頁的命令部分](https://man.openbsd.org/tmux#COMMANDS)

### 複製模式快捷鍵

複製模式快捷鍵綁定在 copy-mode 和 copy-mode-vi 按鍵表中設定\
複製模式具有一組單獨的命令，這些命令使用 -X 標誌\
傳遞給 send-keys 命令，例如，複製模式 start-of-line 命令\
將游標移動到行的開頭，並綁定 C-a 到 copy-mode 按鍵表：

```
$ tmux lsk -Tcopy-mode C-a
bind-key -T copy-mode C-a send-keys -X start-of-line
```

[手冊頁](https://man.openbsd.org/tmux#WINDOWS_AND_PANES)中提供了複製模式命令的完整列表，這裡是選取：

| 命令                          | *emacs(1)* | *vi(1)* | 描述                       |
| --------------------------- | ---------- | ------- | ------------------------ |
| begin-selection             | C-Space    | Space   | 開始選取                     |
| cancel                      | q          | q       | 離開複製模式                   |
| clear-selection             | C-g        | Escape  | 清除選取                     |
| copy-pipe                   |            |         | 複製並管道到第一個參數中的命令          |
| copy-selection-and-cancel   | M-w        | Enter   | 複製選取並離開複製模式              |
| cursor-down                 | Down       | j       | 向下移動游標                   |
| cursor-left                 | Left       | h       | 向左移動游標                   |
| cursor-right                | Right      | l       | 向右移動游標                   |
| cursor-up                   | Up         | k       | 向上移動游標                   |
| end-of-line                 | C-e        | $       | 移動游標到行尾                  |
| history-bottom              | M->        | G       | 移至歷史底部                   |
| history-top                 | M-<        | g       | 移至歷史頂部                   |
| middle-line                 | M-r        | M       | 移至中間行                    |
| next-word-end               | M-f        | e       | 移至下一個單字的節尾               |
| page-down                   | PageDown   | C-f     | 向下翻頁                     |
| page-up                     | PageUp     | C-b     | 向上翻頁                     |
| previous-word               | M-b        | b       | 移至上一個單字                  |
| rectangle-toggle            | R          | v       | 切換矩形選取                   |
| search-again                | n          | n       | 重複上一次搜尋                  |
| search-backward             |            | ?       | 向後搜尋，第一個參數是搜尋項目          |
| search-backward-incremental | C-r        |         | 向後漸進搜尋，通常與 -i 標誌一起使用命令提示 |
| search-forward              |            | /       | 向前搜尋，第一個參數是搜尋項目          |
| search-forward-incremental  | C-s        |         | 向前漸進搜尋                   |
| search-reverse              | N          | N       | 重複上一次搜尋，但方向相反            |
| start-of-line               | C-a        | 0       | 移至行首                     |

## 選項類型

### 顯示選項

`$ tmux show -s`\
-s 顯示伺服器選項

`$ tmux show -g`\
-g 沒有其他的旗標為顯式全域會話選項

`$ tmux show -wg`\
-w 和 -g 一起為顯示全域窗口選項

`$ tmux show -g status`\
指定顯示 status 選項

### 改變選項

`set -g status off`\
設定狀態欄選項關閉

`set -s default-terminal 'tmux-256color'`\
設定預設終端選項

`set -gu status`\
-u 變成未設置選項，未設置選項會恢復成預設值

## 顏色和風格

`set -g status-style 'bg=blue'`\
設定狀態欄背景的顏色為藍色

剩下的風格項目寫在[手冊裡](https://man.openbsd.org/tmux#STYLES)

## 有用選項列表

除了樣式選項，這是最常用的 tmux 選項的簡短列表：

| 選項                 | 類型  | 描述                                                        |
| ------------------ | --- | --------------------------------------------------------- |
| base-index         | 會話  | 如果設定，則窗口索引從 base-index 開始而不是從0                            |
| buffer-limit       | 伺服器 | 保留的最大自動緩衝區數，預設值為50                                        |
| default-terminal   | 伺服器 | tmux 中 TERM 環境變數的預設值                                      |
| display-panes-time | 窗口  | `C-b q` 以毫秒為單位的時間顯示的窗格號                                   |
| display-time       | 會話  | 狀態欄上顯示訊息的時間（以毫秒為單位）                                       |
| escape-time        | 伺服器 | <p> tmux 收到 Escape 鍵後等待的時間<br>以查看它是否是較長鍵序列的一部分</p>        |
| focus-events       | 伺服器 | <p>tmux 是否發送焦點鍵序列，當活動窗格更改時<br>以及是否從外部終端接收（如果支持）</p>       |
| history-limit      | 會話  | 每個窗格的歷史記錄中保留的最大行數                                         |
| mode-keys          | 窗口  | 在復制模式下使用 emacs(1)還是 vi(1) 鍵綁定                             |
| mouse              | 會話  | 如果啟用了游標                                                   |
| pane-border-status | 窗口  | 狀態欄是否出現在每個窗格邊框中：頂部或底部                                     |
| prefix             | 會話  | 前綴鍵，預設為 `C-b`                                             |
| remain-on-exit     | 窗口  | 程序在運行離開時是否自動殺死窗格                                          |
| renumber-windows   | 會話  | <p>如果 on(開)，則窗口將自動重新編號<br>以填補窗口列表中的所有間隙</p>               |
| set-clipboard      | 會話  | <p>當複製文本和外部終端支持時</p><p>tmux 是否應嘗試設定外部 X(7) 剪貼板</p>        |
| set-titles         | 會話  | 如果 on，tmux 將設定外部終端的標題                                     |
| status             | 會話  | 狀態行是否可見                                                   |
| status-keys        | 會話  | 在命令提示字元下是否使用 emacs(1) 或 vi(1) 鍵綁定                         |
| status-interval    | 會話  | 重畫狀態行之前的最長時間（以秒為單位）                                       |
| status-position    | 會話  | 狀態行的位置：頂部或底部                                              |
| synchronize-panes  | 窗口  | <p>如果 on，則將在窗口中的任何窗格中鍵入的內容<br>發送到窗口中的所有窗格 - 請謹慎使用此選項！</p> |
| terminal-overrides | 會話  | tmux 的任何功能都應從為外部終端指定的 TERM 中覆蓋                            |

### 樣式和格式選項列表

這是最常用的 tmux 樣式和格式選項列表：

| 選項                           | 類型 | 描述                                           |
| ---------------------------- | -- | -------------------------------------------- |
| display-panes-active-colour  | 會話 | `C-b q` 活動窗格編號的樣式                            |
| display-panes-colour         | 會話 | <p><code>C-b q</code> 除了活動窗格的<br>窗格編號的樣式</p> |
| message-style                | 會話 | 狀態行和命令提示字元上顯示的訊息樣式                           |
| mode-style                   | 窗口 | 在複製模式選取的樣式                                   |
| pane-active-border-style     | 窗口 | 活動窗格邊框的樣式                                    |
| pane-border-format           | 窗口 | 如果設定了 panel-border-status 則文本格式顯示在窗格邊框狀態行中的  |
| pane-border-style            | 窗口 | 除了活動窗格的窗格邊框的樣式                               |
| status-left-length           | 會話 | 狀態行左側的最大長度                                   |
| status-left-style            | 會話 | 狀態行左側的樣式                                     |
| status-left                  | 會話 | 狀態行左側的文本格式                                   |
| status-right-length          | 會話 | 狀態行右側的最大長度                                   |
| status-right-style           | 會話 | 狀態行右側的樣式                                     |
| status-right                 | 會話 | 狀態行右側的文本格式                                   |
| status-style                 | 會話 | 狀態行整體的樣式，部分可能會被更具體的選項覆蓋，像是 status-left-style |
| window-active-style          | 窗口 | 窗口活動窗格中預設顏色的樣式                               |
| window-status-current-format | 窗口 | 窗口列表中當前窗口的格式                                 |
| window-status-current-style  | 窗口 | 窗口列表中當前窗口的樣式                                 |
| window-status-format         | 窗口 | 除當前窗口外，窗口列表中窗口的格式                            |
| window-status-separator      | 窗口 | 窗口列表中窗口之間的分隔字元                               |
| window-status-style          | 窗口 | 除當前窗口外，窗口列表中窗口的樣式                            |
| window-style                 | 窗口 | 除了活動窗格以外，窗口中窗格的預設顏色樣式                        |

## 常見配置更改

.tmux.conf 常見的配置更改

### 更改前綴鍵

將 C-b 前綴鍵改成 C-a

```
set -g prefix C-a
unbind C-b
bind C-a send-prefix
```

### 自定義狀態行

`set -g status off`\
關閉狀態行

`set -g status-position top`\
將狀態行移到頂部

`set -g status-style bg=red`\
將背景色設定為紅色

`set -g status-right '%H:%M'`\
將右側的文本更改為僅有時間

`set -g window-status-current-style 'underscore'`\
在當前窗口下劃線

### 配置窗格邊框

可以設定窗格的邊框顏色

```
set -g pane-border-style fg=red
set -g pane-active-border-style 'fg=red,bg=yellow'
```

可以為每個窗格分配一個帶有 `panel-border-status` 選項的狀態行，例如以粗體顯示窗格標題

```
set -g pane-border-status top
set -g pane-border-format '#[bold]#{pane_title}#[default]'
```

### **vi(1)鍵綁定**

1. mode-keys 複製模式使用 vi 鍵
2. status-keys 命令提示使用 vi 鍵

```
set -g mode-keys vi
set -g status-keys vi
```

### 滑鼠複製行為

`unbind -Tcopy-mode MouseDragEnd1Pane`\
釋放滑鼠時，不複製或清除選擇內容或退出複制模式。\
必須使用鍵盤來複製選取

`bind -Tcopy-mode MouseDragEnd1Pane send -X copy-selection`\
複製並清除選取，但不退出複制模式

`bind -Tcopy-mode MouseDragEnd1Pane send -X copy-selection-no-clear`\
複製但不清除選取
