# 配置 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`\
複製但不清除選取


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kanneg881.gitbook.io/workspace/zhong-duan/tmux/pei-zhi-tmux.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
