.tmux
这是一个独立的、漂亮且多功能的 .tmux.conf
配置文件。
安装
要求:
- tmux
>= 2.6
在 Linux、Mac、OpenBSD、Cygwin 或 WSL 中运行 - awk、perl (支持 Time::HiRes) 和 sed
- 在 tmux 外部,
$TERM
必须设置为xterm-256color
⚠️ 安装之前,您可能想备份现有配置。
您可以在以下任一位置安装 Oh my tmux!:
~
$XDG_CONFIG_HOME/tmux
~/.config/tmux
在 ~
中安装:
$ cd
$ git clone https://github.com/gpakosz/.tmux.git
$ ln -s -f .tmux/.tmux.conf
$ cp .tmux/.tmux.conf.local .
在 $XDG_CONFIG_HOME/tmux
中安装:
$ git clone https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux"
$ mkdir -p "$XDG_CONFIG_HOME/tmux"
$ ln -s "/path/to/oh-my-tmux/.tmux.conf" "$XDG_CONFIG_HOME/tmux/tmux.conf"
$ cp "/path/to/oh-my-tmux/.tmux.conf.local" "$XDG_CONFIG_HOME/tmux/tmux.conf.local"
在 ~/.config/tmux
中安装:
$ git clone https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux"
$ mkdir -p "~/.config/tmux"
$ ln -s "/path/to/oh-my-tmux/.tmux.conf" "~/.config/tmux/tmux.conf"
$ cp "/path/to/oh-my-tmux/.tmux.conf.local" "~/.config/tmux/tmux.conf.local"
⚠️ 在 $XDG_CONFIG_HOME/tmux
或 ~/.config/tmux
中安装时,配置文件名前面没有 .
字符。
❗️ 您永远不应该修改主 .tmux.conf
或 tmux.conf
文件。如果这样做,后果自负。相反,每个自定义都应该在您的 .tmux.conf.local
或 tmux.conf.local
自定义文件副本中进行。
如果您是 Vim 用户,将 $EDITOR
环境变量设置为 vim
将启用并进一步自定义 vi 风格的键绑定(参见 tmux 手册)。
如果您是 tmux 新手,我建议您阅读 @bphogan 的 tmux 2: Productive Mouse-Free Development。
现在继续[调整]您的 .local
自定义文件副本。
故障排除
-
我正在运行 tmux
HEAD
,但是东西不能正常工作。我该怎么办?请开一个 issue 描述即将发布的 tmux 中不工作的内容。我会尽最大努力解决它。
-
状态栏损坏和/或在屏幕底部重复。这是怎么回事?
这在 Linux 上尤其常见,当发行版提供了接收 Unicode 9.0 升级的 glib 版本(glib
>= 2.50.1
),同时提供了未升级的 glibc 版本(glibc< 2.26
)时。您也可以将LC_CTYPE
配置为使用UTF-8
语言环境。通常,基于 VTE 的终端模拟器依赖于 glib 的g_unichar_iswide()
函数,而 tmux 依赖于 glibc 的wcwidth()
函数。当这两个函数不一致时,显示就会混乱。在 macOS 上使用 iTerm2 并启用"使用 Unicode 版本 9 字符宽度"(在
Preferences... > Profiles > Text
中)时,也可能发生这种情况。出于这个原因,默认示例
.local
自定义文件停止使用 Unicode 8.0 和 9.0 标准之间宽度发生变化的 Unicode 字符,以及 Emoji。 -
我安装了 Powerline 和/或(修补过的)字体,但看不到 Powerline 符号。
首先,您不需要安装 Powerline。您只需要用 Powerline 符号修补过的字体或独立的
PowerlineSymbols.otf
字体。然后确保您的.local
自定义文件副本在tmux_conf_theme_left_separator_XXX
值中使用 Powerline 代码点。 -
我正在使用 Bash On Windows (WSL),颜色和 Powerline 外观损坏。
目前在为 Bash On Windows 提供动力的新控制台中存在一个 bug,阻止文本属性(粗体、下划线等)与颜色正确组合。解决方法是搜索您的
.local
自定义文件副本,并将属性替换为'none'
。此外,在 Windows 控制台用 DirectWrite 替换其基于 GDI 的渲染之前,Powerline 符号将会损坏。
替代方案是使用 WSL 的 Mintty 终端。
功能
C-a
作为辅助前缀,同时保留默认的C-b
前缀- 视觉主题灵感来自 Powerline
- 使用
<prefix> +
将任何窗格最大化为新窗口 - 支持 SSH/Mosh 的用户名和主机名状态行信息
- 用
<prefix> m
切换鼠标模式 - 笔记本电池状态行信息
- 运行时间状态行信息
- 可选的焦点窗格高亮
- 可配置的新窗口和窗格行为(可选择保留当前路径)
- 支持 SSH/Mosh 的分割窗格(重新连接到远程服务器)
- 复制到操作系统剪贴板(在 Linux 上需要
xsel
、xclip
或wl-copy
) - 支持 4 位十六进制 Unicode 字符
- 如果可用,集成 Facebook PathPicker
- 如果可用,集成 Urlscan (首选)或 Urlview
"使用 <prefix> +
将任何窗格最大化为新窗口"功能与内置的 resize-pane -Z
不同,因为它允许您进一步分割最大化的窗格。它还更灵活,允许您将窗格最大化为新窗口,然后切换窗口,然后返回,窗格仍然在其自己的窗口中处于最大化状态。然后,您可以通过从源窗口或最大化窗口使用 <prefix> +
来最小化窗格。
鼠标模式允许您设置活动窗口、设置活动窗格、调整窗格大小,并自动切换到复制模式以选择文本。
绑定
可以通过使用前缀键和命令键的组合来控制已附加客户端的 tmux。此配置使用 C-a
作为辅助前缀,同时保留 C-b
作为默认前缀。在以下键绑定列表中:
<prefix>
表示您必须按下 Ctrl + a 或 Ctrl + b<prefix> c
表示您必须按下 Ctrl + a 或 Ctrl + b 然后按 c<prefix> C-c
表示您必须按下 Ctrl + a 或 Ctrl + b 然后按 Ctrl + c
此配置使用以下绑定:
-
<prefix> e
用$EDITOR
环境变量定义的编辑器(为空时默认为vim
)打开.local
自定义文件副本 -
<prefix> r
重新加载配置 -
C-l
清除屏幕和 tmux 历史记录 -
<prefix> C-c
创建新会话 -
<prefix> C-f
让您按名称切换到另一个会话 -
<prefix> C-h
和<prefix> C-l
让您导航窗口(默认的<prefix> n
和<prefix> p
未绑定) -
<prefix> Tab
带您到最后活动的窗口 -
<prefix> -
垂直分割当前窗格 -
<prefix> _
水平分割当前窗格 -
<prefix> h
、<prefix> j
、<prefix> k
和<prefix> l
让您像 Vim 一样导航窗格 -
<prefix> H
、<prefix> J
、<prefix> K
、<prefix> L
让您调整窗格大小 -
<prefix> <
和<prefix> >
让您交换窗格 -
<prefix> +
将当前窗格最大化为新窗口 -
<prefix> m
切换鼠标模式开关 -
<prefix> U
启动 Urlscan(首选)或 Urlview(如果可用) -
<prefix> F
启动 Facebook PathPicker(如果可用) -
<prefix> Enter
进入复制模式 -
<prefix> b
列出粘贴缓冲区 -
<prefix> p
从顶部粘贴缓冲区粘贴 -
<prefix> P
让您选择要从中粘贴的粘贴缓冲区
此外,copy-mode-vi
匹配我自己的 Vim 配置
copy-mode-vi
的绑定:
v
开始选择/可视模式C-v
在块状可视模式和可视模式之间切换H
跳转到行首L
跳转到行尾y
将选择复制到顶部粘贴缓冲区Escape
取消当前操作
配置
虽然此配置尝试提供合理的默认设置,但您可能希望根据自己的需求进一步自定义它。
❗️ 再次强调,您永远不应该修改主 .tmux.conf
或 tmux.conf
文件。如果这样做,后果自负。
请参考示例 .local
自定义文件以了解更多关于允许您改变不同行为的变量。成功安装后,按 <prefix> e
将用 $EDITOR
环境变量定义的编辑器(为空时默认为 vim
)打开您的 .local
自定义文件副本。
启用 Powerline 外观
Powerline 最初是 Vim 的状态行插件。它受欢迎的醒目外观基于使用特殊符号:
要使用这些符号,有几个选项:
- 使用已经包含这些字体的字体:这就是例如 Source Code Pro 字体的 2.030R-ro/1.050R-it 版本的情况
- 使用预先修补的字体
- 使用你喜欢的字体以及 Powerline 字体(仅包含 Powerline 符号):这高度依赖于你的操作系统和终端模拟器,例如这里有一个配置使用
PowerlineSymbols.otf
的 iTerm2 截图
然后编辑你的 .local
自定义文件副本(使用 <prefix> e
)并调整以下变量:
tmux_conf_theme_left_separator_main='\uE0B0'
tmux_conf_theme_left_separator_sub='\uE0B1'
tmux_conf_theme_right_separator_main='\uE0B2'
tmux_conf_theme_right_separator_sub='\uE0B3'
Powerline 手册包含了如何安装包含 Powerline 符号的字体的更多细节。但你不需要安装 Powerline 本身。
配置状态栏
编辑你的 .local
自定义文件副本(<prefix> e
)并根据你自己的偏好调整 tmux_conf_theme_status_left
和 tmux_conf_theme_status_right
变量。
此配置支持以下内置变量:
#{battery_bar}
: 水平电池充电条#{battery_hbar}
: 1 字符宽,水平电池充电条#{battery_vbar}
: 1 字符宽,垂直电池充电条#{battery_percentage}
: 电池百分比#{battery_status}
: 电池是充电还是放电?#{circled_session_name}
: 圆圈中的会话号,最多 20#{hostname}
: SSH/Mosh 感知的主机名信息#{hostname_ssh}
: SSH/Mosh 感知的主机名信息,未通过 SSH/Mosh 连接到远程服务器时为空#{loadavg}
: 平均负载#{pairing}
: 会话是否连接到多个客户端?#{prefix}
: 前缀键是否被按下?#{root}
: 当前用户是否为 root?#{synchronized}
: 面板是否同步?#{uptime_y}
: 运行时间(年)#{uptime_d}
: 运行时间(天),使用#{uptime_y}
时取模 365#{uptime_h}
: 运行时间(小时)#{uptime_m}
: 运行时间(分钟)#{uptime_s}
: 运行时间(秒)#{username}
: SSH/Mosh 感知的用户名信息#{username_ssh}
: SSH 感知的用户名信息,未通过 SSH/Mosh 连接到远程服务器时为空
除了上面提到的变量外,tmux_conf_theme_status_left
和 tmux_conf_theme_status_right
变量还支持常规的 tmux 语法,例如使用 #()
调用外部命令插入由 wttr.in 提供的天气信息:
tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #(curl -m 1 wttr.in?format=3 2>/dev/null; sleep 900) , %R , %d %b | #{username}#{root} | #{hostname} '
sleep 900
调用确保无论 status-interval
的值如何,网络请求最多每 15 分钟发出一次。
💡 你也可以通过编写特殊函数来定义自己的自定义变量,请参阅示例 .local
自定义文件以获取说明。
最后,请记住 tmux_conf_theme_status_left
和 tmux_conf_theme_status_right
最终会作为 status-left
和 status-right
传递给 tmux,这意味着它们会通过 strftime()
处理。因此,%
字符具有特殊含义,需要通过将其加倍来转义,例如:
tmux_conf_theme_status_right='#(echo foo %% bar)'
另请参阅 man 3 strftime
。
使用 TPM 插件
此配置现在内置了 TPM 支持:
- 使用
set -g @plugin ...
语法启用插件 - 当插件引入要在
status-left
或status-right
中使用的变量时,你可以在tmux_conf_theme_status_left
和tmux_conf_theme_status_right
变量中使用它,请参阅上面的说明 👆 - ⚠️ 不要在任何配置文件中添加
set -g @plugin 'tmux-plugins/tpm'
- ⛔️ 不要在任何配置文件中添加
run '~/.tmux/plugins/tpm/tpm'
⚠️ TPM 绑定与上游略有不同:
- 安装插件:
<prefix> + I
- 卸载插件:
<prefix> + Alt + u
- 更新插件:
<prefix> + u
请参阅示例 .local
自定义文件以获取说明。
在 Mintty 中的 Cygwin 下使用此配置
我不再推荐在 Cygwin 下运行此配置。Cygwin 下的分叉速度极慢,而此配置在后台执行了大量 run-shell
命令。因此,你将遇到高 CPU 使用率。作为替代方案,请考虑使用 WSL 的 Mintty 终端。
在 Mintty 中的 Cygwin 下使用此配置是可能的,但对 Unicode 符号和表情符号的支持落后于 Mac 和 Linux。
特别是,Mintty 的文本渲染是通过 GDI 实现的,这有一些限制:
- 彩色表情符号仅从 Windows 8.1 开始通过 DirectWrite 可用
- 双宽符号的显示,如电池放电符号指示器(U+1F50B)有bug
要正确显示 Unicode 符号,你必须使用字体链接。
打开 regedit.exe
,然后导航到注册表键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
,
为你喜欢的字体添加一个新条目,将其链接到 Segoe UI Symbol 字体。