tmux配置

原生tmux 环境安装配置

环境 macos12.5

终端配置:zsh

安装

1
brew install tmux 

版本查看

1
2
tmux -V
# tmux 3.3a

配置文件路径默认是在家目录

配置文件立即生效

1
echo "tmux source-file ~/.tmux.conf.local" >> ~/.tmux.conf.local

安装插件

vim ~/.tmux.conf 命令对tmux配置文件进行编辑

1
2
3
4
5
6
7
8
9
10
11
# Display color
set -g default-terminal "screen-256color"

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-logging'
set -g history-limit 10000000

run -b '~/.tmux/plugins/tpm/tpm'

tmux下载插件下载

按下<prefix> + shift + itmux会自动下载插件到~/.tmux/plugins/ 目录 改过程我执行的时没有回显,是看到有plugins/目录生成。

tmux cheetsheets

指的是没有经过修改的原生的tmux 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
##############################################################################
# session
##############################################################################

tmux # 创建新的 session
tmux new -S name # 创建新的 session 并指定一个name
tmux ls # 查看多少个后台工作的 session
tmux a/at/attach # 重新连接 session
tmux a/at/attach -t num # 如果有多个 session, 指定 session num 连接
tmux kill-ses -t myses # kill 某个 session
tmux kill-ses -a # kill 所有 session, 除了当前的 session
tmux kill-ses -a -t myses # kill 所有 session, 除了 myses


##############################################################################
# 操作方式
##############################################################################

<prefix> + key # <prefix> 默认为 ctrl + b
<prefix> + c # 表示先按 ctrl + b 再按 c 键


##############################################################################
# 帮助信息
##############################################################################

<prefix> + ? # 查看所有的 key map


##############################################################################
# window 操作
##############################################################################

<prefix> + c # 新建一个 window
<prefix> + n # 下一个 window
<prefix> + p # 上一个 window
<prefix> + w # 列出 window
<prefix> + & # 关闭当前 window
<prefix> + num[1-9] # 选定特定 num 的 window
<prefix> + f # 查找 window
<prefix> + , # 重命名 window
<prefix> + . # 移动 window



##############################################################################
# pane 操作
##############################################################################

<prefix> + % # 纵向分裂
<prefix> + " # 横向分裂
<prefix> + 方向键 # 在一个 window 中切换 pane
<prefix> + ctrl-方向键 # 调整 pane 大小
<prefix> + z # 全屏化当前 pane, 再次执行退出全屏
<prefix> + x # 关闭当前 pane
<prefix> + q # 显示 pane 编号
<prefix> + o # 跳到下一个 pane
<prefix> + { # 跟前一个编号的 pane 交换
<prefix> + } # 跟后一个编号的 pane 交换
<prefix> + ; # 跳转到上一个活跃的 pane
<prefix> + ! # 将 pane 转化为 window
<prefix> + <Space> # 改变 pane 的布局


##############################################################################
# session
##############################################################################

<prefix> + d # detach 整个session, 后续可以重新连接
<prefix> + s # 列出 session
<prefix> + $ # 重命名 session
<prefix> + ( # 跳到上一个 seesion
<prefix> + ) # 跳到下一个 seesion


##############################################################################
# Misc
##############################################################################
<prefix> + t # 显示时钟
<prefix> + : # 命令行

##############################################################################
# pane 同步
##############################################################################

:setw synchronize-panes # 打开(关闭) pane 同步模式, 发送命令到所有的 pane 中
# 只影响当前 window 的 pane

##############################################################################
# 复制模式 (copy-mode)
##############################################################################

添加下面一行到 $HOME/.tmux.conf, 通过 vim 的快捷键实现浏览, 复制等操作;

setw -g mode-keys vi

更多 vim 快捷键可参考 ../editors/vim.txt, 以下列出一些常用快捷键.

<prefix> + [ # 进入 copy mode

vi emacs 功能
^ M-m # 跳转到一行开头
Escape C-g # 放弃选择
k Up # 上移
j Down # 下移
h Left # 左移
l Right # 右移
L # 最后一行
M M-r # 中间一行
H M-R # 第一行
$ C-e # 跳转到行尾
: g # 跳转至某一行
C-d M-Down # 下翻半页
C-u M-Up # 上翻半页
C-f Page down # 下翻一页
C-b Page up # 上翻一页
w M-f # 下一个字符
b M-b # 前一个字符
q Escape # 退出
? C-r # 往上查找
/ C-s # 往下查找
n n # 查找下一个

Space C-Space # 进入选择模式
Enter M-w # 确认选择内容, 并退出

<prefix> + ] # 粘贴选择内容(粘贴 buffer_0 的内容)

:show-buffer # 显示 buffer_0 的内容
:capture-buffer # 复制整个能见的内容到当前的 buffer
:list-buffers # 列出所有的 buffer
:choose-buffer # 列出所有的 buffer, 并选择用于粘贴的 buffer
:save-buffer buf.txt # 将 buffer 的内容复制到 buf.txt
:delete-buffer -b 1 # 删除 buffer_1


##############################################################################
# mouse-mode
##############################################################################

:setw -g mode-mouse on # 打开鼠标模式
:set -g mouse-select-pane on # 通过鼠标选择 pane
:set -g mouse-resize-pane on # 通过鼠标更改 pane 大小
:set -g mouse-select-window on # 通过鼠标选择 window


##############################################################################
# References
##############################################################################

https://gist.github.com/MohamedAlaa/2961058
https://tmuxcheatsheet.com/

所有的快捷键都有对应的 command, 参考:
http://man.openbsd.org/OpenBSD-current/man1/tmux.1

可以通过 $HOME/.tmux.conf 更改配置, 参考一些比较好的 tmux 配置:
https://github.com/gpakosz/.tmux

Fix

zsh shell 中使用了 zsh-autosuggestions 之后进入 tmux 新建的sessin 会导致输入和显示的字符不匹配

只需要在命令行中导出一个环境变量就可以正常使用了。

1
export TERM=xterm-256color  

Oh-my-tmux 安装配置

按照以下命名执行或在家目录创建一个.tmux 的隐藏文件 并且创建了一个.tmux.conf软链接到用户的家目录,并且家目录中存在一个 tmux.conf.local 后期只要对这个文件进行修改就可以

1
2
3
4
$ cd
$ git clone https://github.com/gpakosz/.tmux.git
$ ln -s -f .tmux/.tmux.conf
$ cp .tmux/.tmux.conf.local .

关于oh-my-tmux 的配置的详情

请查看tmux 项目主页

tmux 的自定义配置

1
2
3
4
5
6
7
8
9
10
11
12
# 列出所有快捷键,及其对应的 Tmux 命令
$ tmux list-keys

# 列出所有 Tmux 命令及其参数
$ tmux list-commands

# 列出当前所有 Tmux 会话的信息
$ tmux info

# 重新加载当前的 Tmux 配置
$ tmux source-file ~/.tmux.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133

# 终端颜色设置为 tmux-256colo
# 参考https://zhuanlan.zhihu.com/p/293788971
# 参考git https://gist.github.com/bbqtd/a4ac060d6f6b9ea6fe3aabe735aa9d95
set-option default-terminal "tmux-256color"
set-option -a terminal-overrides ",*256col*:RGB"






# 基础配置

set -g display-time 3000
set -g history-limit 65535


## 鼠标支持
set -g mouse on


## 面板相关
# 分隔面板
unbind '"'
bind - splitw -v -c '#{pane_current_path}'
unbind %
bind | splitw -h -c '#{pane_current_path}'


# 面板(pane)切换
bind -r k select-pane -U
bind -r j select-pane -D
bind -r h select-pane -L
bind -r l select-pane -R
bind -r e lastp # 选择最后一个面板
bind -r ^e last # 选择最后一个窗口
bind -r ^u swapp -U # 与前一个面板交换位置
bind -r ^d swapp -D # 与后一个面板交换位置
# -r表示可重复按键,大概500ms之内,重复的h、j、k、l按键都将有效,完美支持了快速切换的Geek需求


# 调整面板大小:绑定 Ctrl + h/j/k/l 键调整pane边缘
bind -r ^k resizep -U 10 # upward (prefix Ctrl+k)
bind -r ^j resizep -D 10 # downward (prefix Ctrl+j)
bind -r ^h resizep -L 10 # to the left (prefix Ctrl+h)
bind -r ^l resizep -R 10 # to the right (prefix Ctrl+l)


## 其他杂项配置
bind r source-file ~/.tmux.conf \; display-message "source-file ~/.tmux.conf done" # 绑定重载 settings 的热键



## 一些锦上添花的优化
# 设置窗口面板起始序号
set -g base-index 1 # 设置窗口(window)的起始下标为1
set -g pane-base-index 1 # 设置面板(pane)的起始下标为1

# 关闭默认的rename机制
setw -g automatic-rename off # tmux默认会自动重命名窗口,频繁的命令行操作,将频繁触发重命名,比较浪费CPU性能
setw -g allow-rename off

# 关闭默认窗口标题
#set -g set-titles off

# 自定义状态栏

set -g status-position top # 状态栏在顶部
set -g status-utf8 on # 状态栏支持utf8
set -g status-interval 1 # 状态栏刷新时间
set -g status-justify left # 状态栏列表左对齐
setw -g monitor-activity on # 非当前窗口有内容更新时在状态栏通知
#set -g status-bg black # 设置状态栏背景黑色
#set -g status-fg yellow # 设置状态栏前景黄色
#set -g status-style "bg=black, fg=yellow" # 状态栏前景背景色

set -g status-left "#[bg=#88cc44] Sess: #S " # 状态栏-左侧内容 (#S: 会话(session)名称)
#set -g status-right 'Continuum status: #{continuum_status}' # 状态栏右侧内容
set -g status-left-length 300 # 状态栏-左边长度300
set -g status-right-length 500 # 状态栏-左边长度500

set -wg window-status-format " #I:#W " # 状态栏-(当前窗口除外的其他)窗口名称格式
set -wg window-status-separator "" # 状态栏-窗口名称之间的间隔
set -wg window-status-current-format " #I:#W #F " # 状态栏-当前窗口名称格式(#I:序号,#w:窗口名称,#F:间隔符)
set -wg window-status-current-style "bg=black, fg=yellow" # 状态栏-当前窗口名称的背景色
#set -wg window-status-last-style "fg=black" # 状态栏最后一个窗口名称的样式

set -g message-style "bg=#202529, fg=#91A8BA" # 指定消息通知的前景、后景色




# customize plugins 自定义tmux 插件

set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
set -g @continuum-save-interval '30'


########## 插件 ##########
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# tmux-resurrect 插件,用于手动保存和恢复 tmux 环境信息。
# 使用方式:按 PREFIX,Ctrl+s 保存 session,按 PREFIX,Ctrl+r 恢复 session
set -g @plugin 'tmux-plugins/tmux-resurrect'
# 使 tmux-resurrect 支持保存和恢复 tmux 中的 vim 会话:
set -g @resurrect-strategy-vim 'session' # 需要 VIM 先安装 https://github.com/tpope/vim-obsession 插件

# tmux-continuum 插件。依赖: tmux>=1.9, bash, tmux-resurrect
# 每隔15分钟自动保存 tmux 环境信息(不需要任何配置,默认就有)
set -g @plugin 'tmux-plugins/tmux-continuum'
# 使得机器启动时,自动启动 tmux server:
set -g @continuum-boot 'on' # This is only for Linux. For MacOSX, see: https://github.com/tmux-plugins/tmux-continuum/blob/master/docs/automatic_start.md
# tmux server 启动时,自动加载上次保存的环境信息
set -g @continuum-restore 'on'


# 初始化 tmux 插件管理器(保证这行在 ~/.tmux.conf 的非常靠后的位置)
run '~/.tmux/plugins/tpm/tpm'
# 安装插件:
# 1. 在 ~/.tmux.conf 中增加新的插件,如: set -g @plugin 'GitHub用户名/仓库名'。
# 2. 按 PREFIX + I(大写) 键,将自动下载插件,并刷新tmux环境。

# 更新插件: 按 PREFIX + U(大写) 键,选择要更新的插件后,回车确认。

# 卸载插件:
# 1. 在 ~/.tmux.conf 中移除插件所在行。
# 2. 按下 PREFIX + Alt + u(小写) 移除插件。


使用256色 配置 https://zhuanlan.zhihu.com/p/293788971

参考配置

1
2
3
4
5
6
7
https://github.com/gpakosz/.tmux
https://zhuanlan.zhihu.com/p/112426848
https://github.com/Johnny4Fun/.tmux/blob/master/.tmux.conf.local
https://gitee.com/zhang_qu/zq_ohmyzsh/blob/master/.tmux.conf.local
https://www.jianshu.com/p/a032c09fc7c0
https://gitee.com/zhang_qu/zq_ohmyzsh/blob/master/.tmux.conf.local
Tmux使用手册 - http://louiszhai.github.io/2017/09/30/tmux/

tmux配置
https://kingjem.github.io/2022/10/31/tmux配置/
作者
Ruhai
发布于
2022年10月31日
许可协议