tmux
tmux 是一个“终端复用器:它允许创建、访问和控制多个终端(或窗口),每个终端运行一个独立的程序,均可在单个屏幕上完成。tmux 可以从屏幕上分离并在后台继续运行,之后可以重新连接。”
tmux 是 GNU Screen 的一个 ISC 许可的替代品。虽然两者相似,但程序之间存在许多差异,如 tmux FAQ 页面 中所述。
安装
安装 tmux 软件包。 可选地,安装 tmux-bash-completion-gitAUR 以提供 tmux 的 bash 补全功能。
配置
默认情况下,tmux 在 $XDG_CONFIG_HOME/tmux/tmux.conf
和 ~/.config/tmux/tmux.conf
中查找用户特定的配置,版本为 3.2。 全局配置文件可以在 /etc/tmux.conf
中提供,但默认情况下 Arch 不提供此类文件。
快捷键绑定
默认情况下,命令快捷键绑定以 Ctrl+b
为前缀。 例如,要垂直分割窗口,请键入 Ctrl+b %
。
将窗口分割成多个窗格后,可以通过按前缀键(例如 Ctrl+b
)来调整窗格大小,并在继续按住 Ctrl
的同时,按下 Left
/Right
/Up
/Down
。 交换窗格的方式相同,但按 o
而不是方向键。
快捷键绑定可以使用 tmux.conf
中的 bind 和 unbind 命令进行更改。 例如,默认的前缀绑定 Ctrl+b
可以通过在配置文件中添加以下命令更改为 Ctrl+a
unbind C-b set -g prefix C-a bind C-a send-prefix
Alt
(称为 Meta) 代替 Ctrl
。 例如:set -g prefix m-'\'
要创建一个新窗口,您可以使用 Ctrl+b c
,向前移动一个窗口使用 Ctrl+b n
,向后移动一个窗口使用 Ctrl+b p
。
在窗口之间移动的其他方式包括以下几种
Ctrl+b l (Move to the previously selected window) Ctrl+b w (List all windows / window numbers) Ctrl+b <window number> (Move to the specified window number, the default bindings are from 0 – 9) Ctrl+b q (Show pane numbers, when the numbers show up type the key to goto that pane)
tmux 有一个 find-window 选项和快捷键绑定,以方便在多个窗口之间导航
Ctrl+b f <window name> (Search for window name) Ctrl+b w (Select from interactive list of windows)
复制模式
tmux 窗口可能处于多种模式之一。 默认模式允许直接访问附加到窗口的终端;另一种是复制模式。 进入复制模式后,您可以导航缓冲区,包括滚动历史记录。 在复制模式下使用 vi 或 emacs 风格的快捷键绑定。 默认是 emacs,除非 VISUAL 或 EDITOR 包含 ‘vi’
要进入复制模式,请执行以下操作
Ctrl+b [
您可以像在默认编辑器中一样导航缓冲区。
要退出复制模式,请使用以下快捷键绑定之一
vi 模式
q
emacs 模式
Esc
浏览 URL
要在 tmux 中浏览 URL,您必须安装并配置 urlviewAUR。
在新终端内
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; run-shell "$TERMINAL -e urlview /tmp/tmux-buffer"
或在新 tmux 窗口内(无需新终端)
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; new-window -n "urlview" '$SHELL -c "urlview < /tmp/tmux-buffer"'
设置正确的 term
256 色
如果您使用 256 色终端,您需要在 tmux 中设置正确的 term:tmux 或 tmux-256color。 这可以在配置文件中设置
tmux.conf
set -g default-terminal "tmux-256color"
此外,如果 tmux 出现问题,您可以通过在 .bashrc 中添加以下别名来强制 tmux 假定终端支持 256 色
alias tmux="tmux -2"
24 位颜色
tmux 支持 24 位颜色。 如果您的终端支持此模式(参见 [1]),请将其添加到 terminal-features
设置中。
例如,如果您使用 Alacritty 终端,您可以添加
set -as terminal-features ",alacritty*:RGB"
对于其他终端,请将上面的 alacritty
替换为存储在 $TERM
中的相关终端类型。
有关 RGB
terminfo 标志的详细信息,请参阅 tmux(1)。
xterm-keys
要启用 xterm-keys,请在配置文件中添加以下行
tmux.conf
set-option -g xterm-keys on
如果您在 tmux.conf
中启用 xterm-keys,则需要构建自定义 terminfo 以声明新的转义代码,否则应用程序将无法识别它们。 使用 tic
编译以下内容,您可以使用 "xterm-screen-256color" 作为您的 TERM
# A screen- based TERMINFO that declares the escape sequences # enabled by the tmux config "set-window-option -g xterm-keys". # # Prefix the name with xterm- since some applications inspect # the TERM *name* in addition to the terminal capabilities advertised. xterm-screen-256color|GNU Screen with 256 colors bce and tmux xterm-keys, # As of Nov'11, the below keys are picked up by # .../tmux/blob/master/trunk/xterm-keys.c: kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C, # Change this to screen-256color if the terminal you run tmux in # doesn't support bce: use=screen-256color-bce,
要检查您的终端是否支持 bce,您可以使用 tic -c
$ tic -c xterm-screen-256color "xterm-screen-256color", line 16, terminal 'xterm-screen-256color': resolution of use=screen-256color-bce failed
要使用 tic 编译
$ tic xterm-screen-256color
该文件将被编译并保存在 $HOME/.terminfo
或 /usr/share/terminfo/
中(如果以 root 身份运行,则系统范围内可用)。
主题设置
Tmux 可以设置主题,但要做到这一点,首先需要知道颜色代码。 这可以通过执行以下命令来实现,该命令将打印颜色代码以及此类颜色的示例
$ for i in {0..255}; do printf "\x1b[38;5;${i}mcolor${i} - ██████████\n"; done
然后可以使用使用上述命令打印的颜色代码来更改 tmux 配色方案。 以下是如何更改状态栏颜色的示例
# Status line colors set -g status-bg "color4" # blue background set -g status-fg "color7" # gray text color set -g status-right "%l:%M %p" # time format set-window-option -g window-status-current-style "bg=color75,fg=color231 bold" # current window background + foreground colors
窗格边框也可以按照以下示例进行主题设置
# border colors set -g pane-border-style fg="colour255" set -g pane-active-border-style fg="colour33"
其他设置
要将回滚缓冲区限制为 10000 行
set -g history-limit 10000
鼠标可以通过以下方式切换
bind-key m set-option -g mouse \; display "Mouse: #{?mouse,ON,OFF}"
使用 systemd 自动启动
在启动时启动 tmux 服务器有一些显着的优势。 值得注意的是,当您启动新的 tmux 会话时,服务已在运行可以减少启动时的任何延迟。
此外,附加到您的 tmux 会话的任何自定义设置都将被保留,并且您的 tmux 会话可以持久存在,即使您从未登录过,如果您有理由这样做(例如,大量脚本化的 tmux 配置或共享用户 tmux 会话)。
以下服务为指定用户启动 tmux(即使用 tmux@username.service
启动/启用)
/etc/systemd/system/tmux@.service
[Unit] Description=tmux session for user %I [Service] Type=forking User=%I # WARNING: use %I instead of %u here; %u=root in system services. ExecStart=/usr/bin/tmux new-session -s %I -d ExecStop=/usr/bin/tmux kill-session -t %I [Install] WantedBy=multi-user.target
- 您可能希望添加
WorkingDirectory=custom_path
来自定义工作目录。 如果设置为~
,则使用User=
中指定的用户的主目录。 - 添加
-v
tmux 参数以在 WorkingDirectory 中生成 tmux 客户端和服务器日志。 - 如果您想导入与图形会话相关的环境变量,例如
DISPLAY
、WAYLAND_DISPLAY
或SESSION_MANAGER
,请将WantedBy
选项更改为graphical-session.target
,并在[Unit]
部分下添加After=graphical-session.target
。 - 或者,您可以创建一个脚本,该脚本在桌面环境、窗口管理器或 Wayland 合成器加载后自动运行,并使用
tmux setenv -g name [value]
导入相关变量。
或者,您可以将此文件放在您的 systemd/User 目录中(不带 User=%I
并在 WantedBy
中将 multi-user.target
替换为 default.target
),例如 ~/.config/systemd/user/tmux.service
。 这样,tmux 服务将在您登录时启动,除非您还启用了 systemd/User#Automatic start-up of systemd user instances。 由于 Systemd/User#Kill user processes on logout 中对此方法的默认解释,用户服务将在注销时保持活动状态。
会话初始化
您可以通过在 ~/.tmux.conf
中包含这些详细信息,让 tmux 打开一个预加载窗口的会话。
new -n WindowName Command neww -n WindowName Command neww -n WindowName Command
要启动具有分割窗口(多个窗格)的会话,请在新窗口命令 (neww) 下包含 splitw 命令,您想要分割的窗口; 因此
new -s SessionName -n WindowName Command neww -n foo/bar foo splitw -v -p 50 -t 0 bar selectw -t 1 selectp -t 0
将打开 2 个窗口,第二个窗口名为 foo/bar,并将垂直分割成两半 (50%),foo 在 bar 之上运行。 焦点将位于窗口 2 (foo/bar) 的顶部窗格 (foo) 中。
.conf
中指定了 base-index 为 1。要管理多个会话,请从您的配置文件中引用单独的会话文件
# initialize sessions bind F source-file ~/.tmux/foo bind B source-file ~/.tmux/bar
剪贴板集成
可以将 tmux 选择复制到显示服务器剪贴板(主/辅助选择),并从剪贴板粘贴到 tmux 中。 以下 tmux 配置文件代码片段将 X11 和 Wayland 剪贴板/选择与当前的 tmux 选择集成。
unbind p
取消绑定 “上一个窗口” 快捷方式。在 Xorg 上
第一种可能性是使用 xsel
Emacs 风格
bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b" bind-key C-y run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
Vim 风格
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b" bind-key p run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
xclip 也可用于此目的。 与 xsel 不同,当打印不适合当前语言环境的原始比特流时,它的效果更好。 然而,使用 xsel 更简洁,因为 xclip 在从 tmux 缓冲区读取后不会关闭 STDOUT
。 因此,tmux 不知道复制任务已完成,并继续等待 xclip 终止,从而导致 tmux 无响应。 一种解决方法是将 STDOUT
重定向到 /dev/null
Emacs 风格
bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "xclip -i -sel clip > /dev/null" bind-key C-y run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"
Vim 风格
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -sel clip > /dev/null" bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"
在 Wayland 上
确保已安装 wl-clipboard。
Emacs 风格
bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "wl-copy && wl-paste -n | wl-copy -p" bind-key C-y run "wl-paste -n | tmux load-buffer - ; tmux paste-buffer"
Vim 风格
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy && wl-paste -n | wl-copy -p" bind-key p run "wl-paste -n | tmux load-buffer - ; tmux paste-buffer"
Urxvt 中键点击
有一个非官方的 perl 扩展(在官方 FAQ 中提到)可以通过鼠标中键点击启用在 urxvt 和 tmux 之间复制/粘贴。
首先,您需要下载 perl 脚本并将其放入 urxvt 的 perl lib 中
wget http://anti.teamidiot.de/static/nei/*/Code/urxvt/osc-xterm-clipboard mv osc-xterm-clipboard /usr/lib/urxvt/perl/
您还需要在您的 .Xdefaults 中启用该 perl 脚本
~/.Xdefaults
... *URxvt.perl-ext-common: osc-xterm-clipboard ...
接下来,您需要告诉 tmux 关于新功能并启用鼠标支持(如果您尚未启用)
~/.tmux.conf
... set-option -ga terminal-override ',rxvt-uni*:XT:Ms=\E]52;%p1%s;%p2%s\007' set -g mouse on ...
就是这样。 在尝试新的中键点击功能之前,请务必结束 tmux 的所有实例。
在 tmux 中,Shift+鼠标中键点击将粘贴剪贴板选择,而仅鼠标中键点击将粘贴您的 tmux 缓冲区。 在 tmux 之外,只需使用鼠标中键点击粘贴您的 tmux 缓冲区,并使用标准的 Ctrl+c
进行复制。
技巧和提示
使用默认会话布局启动 tmux
会话管理器(如 tmuxinator 和 tmuxp)使管理常见会话配置变得容易。
对于 tmuxinator,安装 tmuxinatorAUR。 使用以下命令测试您的安装
$ tmuxinator doctor
获取默认布局值
像往常一样启动 tmux 并根据您的喜好配置您的窗口和窗格布局。 完成后,通过执行以下命令获取当前布局值(当您仍在当前的 tmux 会话中时)
tmux list-windows
输出可能如下所示(两个窗口,分别具有 3 个窗格和 2 个窗格布局)
0: default* (3 panes) [274x83] [layout 20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]}] @2 (active) 1: remote- (2 panes) [274x83] [layout e3d3,274x83,0,0[274x41,0,0,4,274x41,0,42,7]] @3
您需要复制以供以后使用的有趣部分从 [layout... 开始,但不包括 ... ] @2 (active)。 对于第一个窗口布局,您需要复制例如 20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]}
定义默认 tmux 布局
了解这一点后,您可以退出当前的 tmux 会话。 接下来,通过编辑 tmuxinator 的配置文件来创建默认的 tmux 会话布局(不要复制示例,请按照上述说明获取您的布局值)
~/.tmuxinator/default.yml
name: default root: ~/ windows: - default: layout: 20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]} panes: - clear - vim - clear && emacs -nw - remote: layout: 24ab,274x83,0,0{137x83,0,0,3,136x83,138,0,4} panes: - -
该示例定义了两个名为 “default” 和 “remote” 的窗口。 使用您确定的布局值。 对于每个窗格,您必须使用至少一行 -
。 在第一个窗口窗格中,您在窗格一中启动命令行 “clear”,在窗格二中启动 “vim”,在窗格三中启动 “clear && emacs -nw”,在每次 tmux 启动时执行两个命令。 第二个窗口布局有两个窗格,没有定义任何启动命令。
使用以下命令测试新的默认布局
tmuxinator default
使用默认 tmux 布局自动启动 tmux
如果您想使用默认的 tmux 会话布局启动终端会话,请编辑
~/.bashrc
if [ -z "$TMUX" ]; then tmuxinator default fi
默认会话的替代方法
除了使用上述方法外,还可以编写一个 bash 脚本,该脚本在运行时将创建默认会话并附加到该会话。 然后,您可以从终端执行它,以在该终端中获得预先设计的配置
#!/bin/bash tmux new-session -d -n WindowName Command tmux new-window -n NewWindowName tmux split-window -v tmux selectp -t 1 tmux split-window -h tmux selectw -t 1 tmux -2 attach-session -d
在 urxvt 中启动 tmux
使用此命令启动 urxvt 并启动 tmux 会话。 我将此与我的 .ratpoisonrc 文件中的 exec 命令一起使用。
urxvt -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
每次 shell 登录时启动 tmux
if [ -x "$(command -v tmux)" ] && [ -n "${DISPLAY}" ] && [ -z "${TMUX}" ]; then exec tmux new-session -A -s ${USER} >/dev/null 2>&1 fi
以上代码段的作用如下
- 测试 tmux 是否可执行,
- 以及图形会话是否正在运行(如果您希望 tmux 在任何登录 shell 中启动,请删除此条件,但这可能会干扰 在登录时自动启动 X),
- 以及我们是否尚未在 tmux 会话中,
- 然后尝试附加,如果附加失败,则启动新会话。
如果您使用 systemd 作为用户来保持会话活动,您可以将 if 代码块内的命令替换为以下命令,以附加到该会话并分离所有其他连接的客户端
if ! systemctl --user is-active --quiet tmux.service; then systemctl --user start tmux.service fi exec tmux attach-session -d -t "${USER}" >/dev/null 2>&1
启动非登录 shell
tmux 默认启动 登录 shell ,这可能会导致多个负面副作用
- fortune 的用户可能会注意到,在创建新面板时会打印引言。
- 登录 shell 的配置文件(例如
~/.profile
)在每次创建新面板时都会被解释,因此旨在在会话初始化时运行的命令(例如,设置音频级别)将被执行。
要禁用此行为,请添加到 ~/.tmux.conf
set -g default-command "${SHELL}"
像标签页一样使用 tmux 窗口
添加到 ~/.tmux.conf
的以下设置允许像标签页一样使用 tmux 窗口,例如这些热键的参考所提供的那些 — urxvt 的标签扩展。 其优点是这些虚拟“标签页”独立于终端模拟器。
#urxvt tab like window switching (-n: no prior escape seq) bind -n S-down new-window bind -n S-left prev bind -n S-right next bind -n C-left swap-window -t -1 bind -n C-right swap-window -t +1
当然,这些不应与其他应用程序的热键(例如终端的热键)重叠。 考虑到它们替代了可能被停用的终端标签页。
补充 EOT 热键 Ctrl+d
和 tmux 分离的热键也可能很方便
bind-key -n C-j detach
客户端同时与会话的各种窗口交互
在 Practical Tmux 中,Brandur Leach 写道
- 当多个客户端连接到一个会话时,Screen 和 tmux 的行为略有不同。 在 Screen 中,每个客户端都可以连接到会话,但在其中查看不同的窗口,但在 tmux 中,连接到一个会话的所有客户端都必须查看同一个窗口。
- 可以通过在 tmux 中生成两个单独的会话并将第二个会话同步到第一个会话的窗口来解决此问题,然后将第二个新会话指向第一个会话。
下面的 tmx
脚本实现了这一点 — 此处的版本略有修改,以便在 1
作为其第二个参数时执行 tmux new-window
。 以 tmx base_session_name [1]
形式调用时,它会在必要时启动基本会话。 否则,将创建一个链接到基本会话的新 “客户端” 会话,可以选择添加一个新窗口并附加,并将其设置为一旦变为 “僵尸” 状态就自行终止。 不要忘记使其 可执行。
~/bin/tmx
#!/bin/bash # Modified TMUX start script from: # http://forums.gentoo.org/viewtopic-t-836006-start-0.html # Works because bash automatically trims by assigning to variables and by passing arguments trim() { echo $1; } if [[ -z "$1" ]]; then echo "Specify session name as the first argument" exit fi # Only because I often issue `ls` to this script by accident if [[ "$1" == "ls" ]]; then tmux ls exit fi base_session="$1" # This actually works without the trim() on all systems except OSX tmux_nb=$(trim `tmux ls | grep "^$base_session" | wc -l`) if [[ "$tmux_nb" == "0" ]]; then echo "Launching tmux base session $base_session ..." tmux new-session -s $base_session else # Make sure we are not already in a tmux session if [[ -z "$TMUX" ]]; then echo "Launching copy of base session $base_session ..." # Session id is date and time to prevent conflict session_id=`date +%Y%m%d%H%M%S` # Create a new session (without attaching it) and link to base session # to share windows tmux new-session -d -t $base_session -s $session_id if [[ "$2" == "1" ]]; then # Create a new window in that session tmux new-window fi # Attach to the new session & kill it once orphaned tmux attach-session -t $session_id \; set-option destroy-unattached fi fi
对此有用的设置是
setw -g aggressive-resize on
添加到 ~/.tmux.conf
。 它使 tmux 根据实际查看它的最小客户端调整窗口大小,而不是根据连接到整个会话的最小客户端调整窗口大小。
另一种方法是将以下内容放入 ~/.bashrc
~/.bashrc
function rsc() { CLIENTID=$1.`date +%S` tmux new-session -d -t $1 -s $CLIENTID \; set-option destroy-unattached \; attach-session -t $CLIENTID } function mksc() { tmux new-session -d -s $1 rsc $1 }
引用作者的话
- "mksc foo" 创建一个名为 "foo" 的始终分离的永久客户端。 它还调用 "rsc foo" 来为新创建的会话创建客户端。 "rsc foo" 创建一个按 "foo" 名称分组的新客户端。 它启用了 destroy-unattached,因此当我离开它时,它会杀死客户端。
- 因此,当我的计算机失去网络连接时,所有 "foo.something" 客户端都会被杀死,而 "foo" 仍然存在。 然后我可以调用 "rsc foo" 以从我停止的地方继续工作。
根据终端类型修正 TERM 变量
除了 在 tmux 中设置固定的 TERM 变量 之外,还可以根据终端模拟器的类型设置正确的 TERM(screen
或 screen-256color
)。
~/.tmux.conf
## set the default TERM set -g default-terminal screen ## update the TERM variable of terminal emulator when creating a new session or attaching a existing session set -g update-environment 'DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY TERM' ## determine if we should enable 256-colour support if "[[ ${TERM} =~ 256color || ${TERM} == fbterm ]]" 'set -g default-terminal screen-256color'
~/.zshrc
## workaround for handling TERM variable in multiple tmux sessions properly (by Nicholas Marriott) if [[ -n ${TMUX} && -n ${commands[tmux]} ]];then case $(tmux showenv TERM 2>/dev/null) in *256color) ;& TERM=fbterm) TERM=screen-256color ;; *) TERM=screen esac fi
重新加载更新的配置而无需重启 tmux
默认情况下,tmux 仅在未运行时读取 ~/.tmux.conf
。 要使 tmux 在之后加载配置文件,请执行
tmux source-file path
这可以添加到 ~/.tmux.conf
,例如
~/.tmux.conf
bind r source-file path
您也可以执行 ^: 并键入
source .tmux.conf
模板脚本:在新会话中运行程序或附加到现有会话
此脚本检查一个程序,该程序假定由其自身的先前运行启动。 除非找到,否则它会创建一个新的 tmux 会话并附加到一个以程序命名并运行该程序的窗口。 但是,如果找到了该程序,它只会附加到会话并选择窗口。
#!/bin/bash PID=$(pidof $1) if [ -z "$PID" ]; then tmux new-session -d -s main ; tmux new-window -t main -n $1 "$*" ; fi tmux attach-session -d -t main ; tmux select-window -t $1 ; exit 0
在 其 ArchWiki 页面 上可以找到运行带有 nicklist 插件的 irssi 的派生版本。
终端模拟器窗口标题
如果您通过 SSH 连接到 tmux 窗口中的主机,您会注意到终端模拟器的窗口标题仍然是 user@localhost
而不是 user@server
。 要允许标题栏适应您连接到的任何主机,请在 ~/.tmux.conf
中设置以下内容
set -g set-titles on set -g set-titles-string "#T"
对于 set-titles-string
,#T
将显示 user@host:~
,并随着您连接到不同的主机而相应地更改。
自动布局
在创建新分割或销毁旧分割时,当前选择的布局不会应用。 要解决此问题,请添加以下绑定,这将把当前选择的布局应用于新的或剩余的窗格
bind-key -n M-c kill-pane \; select-layout bind-key -n M-n split-window \; select-layout
Vim 配色方案未加载
如果您的 vim 配色方案未在 tmux 中加载,请参阅以下内容:[2] [3]
Vim 友好的配置
友好的窗格分割
垂直分割窗格的默认快捷键绑定是 Ctrl+b %
,水平分割窗格的默认快捷键绑定是 Ctrl+b "
。 这可能很难键入,具体取决于您的键盘布局,而且也很难记住。
更友好的快捷键绑定是使用 Ctrl+b h
进行水平分割,使用 Ctrl+b v
进行垂直分割,这也很容易记住。
要进行此更改,请在 ~/.tmux.conf
中添加以下行
# More friendly split pane bind-key h split-window -h bind-key v split-window -v
阻止系统挂起
如果从另一台设备连接时 tmux 卡住,因为主机进入睡眠状态,请使用抑制锁运行会话的 shell 命令
tmux new-session -A "systemd-inhibit --what=idle $SHELL"
故障排除
滚动问题
如果在终端中使用 Shift-Page Up/Down 滚动时遇到问题,以下内容将禁用任何报告自身为以 xterm
开头的 term 的 smcup 和 rmcup 功能
set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
这会欺骗终端模拟器,使其认为 tmux 是像 pico 或 mutt 这样的全屏应用程序[5],这将使回滚记录正确。 但是请注意,在窗口/窗格之间切换时,它会变得有点混乱。 考虑改用 tmux 的原生回滚。
鼠标滚动
如果您想使用鼠标滚轮滚动,请确保 .tmux.conf 中 mode-mouse 设置为 on
set -g mouse on
您可以使用以下命令设置滚动历史记录
set -g history-limit 30000
对于 tmux 2.1 及更高版本中的鼠标滚轮滚动,请尝试将以下一项或两项添加到 ~/.tmux.conf
bind -T root WheelUpPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M" bind -T root WheelDownPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; send-keys -M"
虽然以上操作一次只能滚动一行,但请添加此解决方案以滚动整个页面
bind -t vi-copy WheelUpPane page-up bind -t vi-copy WheelDownPane page-down bind -t emacs-copy WheelUpPane page-up bind -t emacs-copy WheelDownPane page-down
终端模拟器不支持 UTF-8 鼠标事件
当终端模拟器不支持 UTF-8 鼠标事件并且 mouse on
tmux 选项设置为 on 时,在终端窗口内单击鼠标左键可能会将 [M#
或 [Ma
等字符串粘贴到提示符中。
要解决此问题,请设置
set -g mouse-utf8 off
Shift+F6 在 Midnight Commander 中不起作用
参见
- BBS 主题
- Screen 和 tmux 功能比较
- powerline,tmux 的动态状态栏
- tmux 插件
- Oh My Tmux!
- tmux Wiki
教程
- Practical Tmux
- 手册页 tmux(1)
- Tmux 教程第 1 部分 和 第 2 部分
- tmux 之道,Tony Narlock 的电子书,tmuxp 和 libtmux 的作者