Tmux配置与美化

本文介绍了我目前使用的Tmux配置。一来是目前的配置用着还算舒服,写此文安利一下;二来也记录一下键位映射,以做备忘。

我的Tmux配置目录

Oh-My-Tmux

目前我用的配置是基于Oh-My-Tmux项目改造的。在这个项目上我进行了一些配色的改变(原生的黑白红是在欣赏不起来),最终效果如下图1所示,环境为Windows Terminal + WSL2 + Tmux 3.0a
图1:Tmux效果图

安装

  1. 配置文件的安装
    这里是对oh-my-tmux的安装流程复述

    • 前置条件

      • Tmux版本大于等于2.4。Tmux的版本可以通过tmux -V命令查看。
      • 预装awk、perl、sed工具
      • $TERM变量必须设置为xterm-256color。这个变量是在~/.bashrc中设置的,echo $TERM可以检查。
    • 安装配置

      1
      2
      3
      4
      $ cd
      $ git clone https://github.com/Gwzlchn/dotConfig.git
      $ ln -s -f ~/dotConfig/tmux/.tmux.conf
      $ cp ~/dotConfig/tmux/.tmux.conf.local .
  2. 字体的安装
    本配置文件中的一些符号图标的显示依赖Nerd Font字体,所以需要在终端软件所在的系统中安装Nerd Font字体。

    Nerd Font并不是一种字体,而是在原有字体上增加了一些Unicode符号的一个字体补丁。你既可以选择手动为自己目前用的字体打上Nerd Font补丁(参考使用nerd-font/font-patcher为字体添加字体图标),也可以在Nerd Font Download页面下载打好补丁后的字体。我用的是FiraCode NerdFont,这个字体看起来比较纤细,同时带连字符效果。

    我目前用的终端是Windows Terminal,Windows安装字体比较简单,点开字体安装即可。之后需要将终端软件配置为刚刚安装的字体。打开Windows Terminal的配置文件settings.json,在profiles.defaults字段下增加"fontFace": xxxx这个属性。如下所示。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     "profiles":
    {
    "defaults":
    {
    // Put settings here that you want to apply to all profiles.
    // "colorScheme": "Dracula",
    //"acrylicOpacity" : 0.4,
    "useAcrylic" : true,
    "fontSize":13,
    "fontFace": "FiraCode Nerd Font",
    "startingDirectory": ".",
    "bellStyle":"none"
    },
    }
  3. 如果完成了上述的安装流程,那么你在Windows Terminal中进入WSL2环境后,输入tmux应该就可以看到图1的效果了。

键位映射

Tmux另一个迷人之处在于你可以用纯键盘来控制终端窗口的增删查改、甚至是缩放与恢复(1.意味着极大概率会碰到Tmux快捷键与其他软件冲突的情况。2.意味着我经常记不住冷门的快捷键映射。3.意味着你可以套用VIM的键位映射,但这里我没有用,因为我不熟VIM)。

一些键位符号的约定

  1. <prefix> 表示前缀键,需要同时按Ctrl + b触发。按下之后状态栏会有提示,表示等待后续按键的输入(Oh-my-tmux效仿Screen,将Ctrl+a也映射成了前缀键,但会和Qemu冲突,故我这里取消了这个映射)
  2. <prefix> c 表示新建一个窗口,需要先同时按Ctrl + b,再按c键触发。
  3. <prefix> C-c 表示新建一个会话,需要先同时按Ctrl + b,再同时按Ctrl - c键触发。
  4. <CR>表示回车
键位映射 动作 备注
<prefix> e 编辑~/.tmux.conf.local配置文件
<prefix> r 重新加载~/.tmux.conf.local配置
<prefix> C-c 新建一个Session
<prefix> c 新建一个Window
<prefix> $ 重命名当前Session
<prefix> , 重命名当前Window
<prefix> % 新建一个垂直方向的Panel
<prefix> _ (下划线) 同上
<prefix> “ 新建一个水平方向的Panel
<prefix> - (减号) 同上
<prefix> w 查看所有打开的Session和Windows 可以通过j/k <CR>来跳转
<prefix> + Up/Left/Down/Right 更改一个Window内Panel大小 按方向键的时候,<prefix>不要松开
<prefix> h/j/k/l 在一个Window内切换到不同的Panel中 使用方向键亦可,按方向键的时候,<prefix>需要松开
<prefix> </<prefix> > 交换两个Panel的位置
<prefix> C-h/<prefix> C-l 在一个Session内的不同Window中切换 默认的<prefix> n/p切换方式已解绑
<prefix> + 将当前Panel最大化成为一个Window,或者恢复一个Window为Panel 这个是Oh-My-Tmux最有用的功能
<prefix> m Tmux鼠标模式开关 默认开
<prefix> <CR>/<prefix> [ 进入Tmux 复制模式
Copy Mode q 退出复制模式 在复制模式下
Copy Mode C-Space 开始复制 同上
Copy Mode C-w 将选中内容复制到Tmux Buffer中 同上
<prefix> p/<prefix> ] 将最新的Tmux Buffer中的内容粘贴到终端中
<prefix> P 选择任意Tmux Buffer中的内容粘贴到终端中
<prefix> b 查看目前所有的Tmux Buffer中的内容

美化Tmux

Oh-My-Tmux给了较大的美化空间,如图2所示。四个方框依次对应的是1.status left, 2.window status, 3.window current status, 4.status right。清楚了这个对应关系,再看~/.tmux.conf.local中的内容就很清楚了。右侧状态栏比较好的一点是,当你使用的SSH登录到远程主机时,username和hostname也会随之改变。

配色方案我这里选用的是Nord Color Scheme
图2: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
# window status style
# - built-in variables are:
# - #{circled_window_index}
# - #{circled_session_name}
# - #{hostname}
# - #{hostname_ssh}
# - #{hostname_full}
# - #{hostname_full_ssh}
# - #{username}
# - #{username_ssh}
tmux_conf_theme_window_status_fg=$nord5
tmux_conf_theme_window_status_bg=$nord1
tmux_conf_theme_window_status_attr="none"
tmux_conf_theme_window_status_format="#I #W"

# window current status style
# - built-in variables are:
# - #{circled_window_index}
# - #{circled_session_name}
# - #{hostname}
# - #{hostname_ssh}
# - #{hostname_full}
# - #{hostname_full_ssh}
# - #{username}
# - #{username_ssh}
#   ﲵ            ﮊ ﮏ ♥ ﰸ ﯅  
tmux_conf_theme_window_status_current_fg=$nord6
tmux_conf_theme_window_status_current_bg=$nord10
tmux_conf_theme_window_status_current_attr="bold"
tmux_conf_theme_window_status_current_format=" #W"

# window activity status style
tmux_conf_theme_window_status_activity_fg="default"
tmux_conf_theme_window_status_activity_bg="default"
tmux_conf_theme_window_status_activity_attr="underscore"

# window bell status style
tmux_conf_theme_window_status_bell_fg='#ffff00'
tmux_conf_theme_window_status_bell_bg="default"
tmux_conf_theme_window_status_bell_attr="blink,bold"

# window last status style
tmux_conf_theme_window_status_last_fg="default"
tmux_conf_theme_window_status_last_bg="default"
tmux_conf_theme_window_status_last_attr="none"
tmux_conf_theme_window_status_last_format='#I #W-'

# status left/right content:
# - separate main sections with "|"
# - separate subsections with ","
# - built-in variables are:
# - #{battery_bar}
# - #{battery_hbar}
# - #{battery_percentage}
# - #{battery_status}
# - #{battery_vbar}
# - #{circled_session_name}
# - #{hostname_ssh}
# - #{hostname}
# - #{hostname_full}
# - #{hostname_full_ssh}
# - #{loadavg}
# - #{mouse}
# - #{pairing}
# - #{prefix}
# - #{root}
# - #{synchronized}
# - #{uptime_y}
# - #{uptime_d} (modulo 365 when #{uptime_y} is used)
# - #{uptime_h}
# - #{uptime_m}
# - #{uptime_s}
# - #{username}
# - #{username_ssh}
tmux_conf_theme_status_left=" #S "
#tmux_conf_theme_status_right="#{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} "
tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},}#{?battery_status,#{battery_status},} | %b %d | %R |
tmux_conf_theme_status_left_fg=$nord5 # '#e4e4e4,#e4e4e4,#e4e4e4' # black, white , white
tmux_conf_theme_status_left_bg=$nord0 #',#00afff' # yellow, pink, white blue
tmux_conf_theme_status_left_attr='bold,none,none'

# status right style
#tmux_conf_theme_status_right_fg="$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14"
#tmux_conf_theme_status_right_bg="$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17"
tmux_conf_theme_status_right_fg=$nord4,$nord6,$nord6,$nord5,$nord5
tmux_conf_theme_status_right_bg=$nord1,$nord7,$nord10,$nord2,$nord1 # dark gray, red, white
tmux_conf_theme_status_right_attr='bold,none,bold,none,none,none'

Tmux配置与美化
https://gwzlchn.github.io/202107/tmux-tutorial/
作者
Zelin Wang
发布于
2021年7月19日
更新于
2022年10月23日
许可协议