文章目录
什么是tmux
tmux是终端多路复用器。它使您可以轻松地在一个终端中的多个程序之间切换,分离它们(它们在后台继续运行),然后将它们重新连接到另一个终端。
tmux是在终端中运行的程序,并允许在其中运行多个其他终端程序。tmux内部的每个程序都有自己的终端,该终端由tmux管理,可以从运行tmux的单个终端访问该终端-这称为多路复用,而tmux是终端多路复用器。
tmux-及其内部运行的任何程序-都可以从其运行所在的终端(外部终端)分离,然后重新连接至同一终端或另一个终端。
在tmux中运行的程序可以是全屏交互式程序,例如vi(1) 或top(1),shell(例如bash(1)或ksh(1))或可以在Unix终端中运行的任何其他程序。
它具有强大的功能集,可以交互方式或通过脚本访问,管理和组织tmux中的程序。
tmux的主要用途是:
-
通过在tmux中运行远程服务器上正在运行的程序,以防止它们掉线。
-
允许从多台不同的本地计算机访问远程服务器上运行的程序。
-
在一个终端中一起使用多个程序和Shell,有点像窗口管理器。
例如:
用户从工作计算机上的xterm(1)使用ssh(1)连接到远程服务器,并运行多个程序。也许是编辑器,编译器和一些shell。
他们以交互方式使用这些程序,也许开始编译,然后使用tmux关闭xterm(1)并开始一天的工作。
然后,他们可以从家里连接到同一台远程服务器,连接到tmux,然后从以前的位置继续。
这是xterm(1)中显示外壳的tmux屏幕截图:
基本概念
tmux具有一系列基本概念和术语,对此非常重要。本节描述如何将tmux内部的终端分组在一起,以及tmux使用的各种术语。
tmux服务器和客户端
tmux将所有状态保持在一个称为tmux服务器的主进程中。它在后台运行,并管理tmux中运行的所有程序,并跟踪其输出。当用户运行tmux命令时,tmux服务器会自动启动,默认情况下,如果没有正在运行的程序,则退出。
用户通过启动客户端来连接到tmux服务器。这将接管运行该终端的终端,并使用中的套接字文件与服务器进行对话/tmp。每个客户端都在一个终端中运行,该终端可以是X(7)终端,例如 xterm(1),系统控制台,也可以是另一个程序内部的终端(例如tmux本身)。每个客户端都由启动该客户端的外部终端的名称来标识,例如/dev/ttypf。
会话,窗口和窗格
tmux内部的每个终端都属于一个窗格,这是一个矩形区域,显示tmux内部的终端的内容。由于tmux内部的每个终端仅显示在一个窗格中,因此术语“窗格”可用于表示所有窗格,终端以及在其中运行的程序。右侧的屏幕截图显示了带有窗格的tmux。
每个窗格显示在一个窗口中。窗口由一个或多个窗格组成,这些窗格一起覆盖了整个区域-因此可以同时看到多个窗格。窗口通常会占用连接tmux的整个终端,但可以更大或更小。窗口中所有窗格的大小和位置称为窗口布局。
每个窗口都有一个名称-默认情况下,tmux将选择一个名称,但用户可以更改它。窗口名称不必唯一,窗口通常由会话和窗口索引而不是其名称来标识。
每个窗口都有一个名称-默认情况下,tmux将选择一个名称,但用户可以更改它。窗口名称不必唯一,窗口通常由会话和窗口索引而不是其名称来标识。
每个窗格与其周围的窗格之间用一条线隔开,这称为窗格边界。每个窗口中都有一个窗格,称为活动窗格,在该窗格中将发送任何键入的文本,这是用于以该窗口为目标的命令的默认窗格。活动窗格的窗格边框标记为绿色,或者如果只有两个窗格,则边框的上,下,左或右一半为绿色。
多个窗口被分组为多个会话。如果窗口是会话的一部分,则称该窗口已链接到该会话。Windows可能同时链接到多个会话,尽管大多数情况下它们仅处于一个会话中。会话中的每个窗口都有一个编号,称为窗口索引-同一窗口可以在不同会话中的不同索引处链接。会话的窗口列表是按其索引顺序链接到该会话的所有窗口。
每个会话都有一个当前窗口,这是连接会话时显示的窗口,并且是针对该会话的所有命令的默认窗口。如果更改了当前窗口,则先前的当前窗口将被称为最后一个窗口。
会话可以附加到一个或多个客户端,这意味着该会话显示在运行该客户端的外部终端上。在该外部终端中键入的所有文本都将发送到附加会话的当前窗口中的活动窗格。会话没有索引,但它们确实具有名称,该名称必须唯一。
总之:
- 程序在窗格的终端中运行,每个窗格都属于一个窗口。
- 每个窗口都有一个名称和一个活动窗格。
- Windows链接到一个或多个会话。
- 每个会话都有一个窗口列表,每个窗口都有一个索引。
- 会话中的窗口之一是当前窗口。
- 会话连接到零个或多个客户端。
- 每个客户端都附加一个会话。
前缀键
一旦连接了tmux客户端,输入的任何密钥都将转发到在当前窗口的活动窗格中运行的程序。对于控制tmux本身的键,必须首先按下一个特殊键-这称为前缀键。
默认的前缀键是C-b
,表示Ctrl键
和b
。在tmux中,修饰键通过在C-控制键,M- 元键(通常Alt在现代计算机上)和S-Shift键的前面加上键来显示。这些可以组合在一起,因此C-M-x意味着要同时按下控制键,meta键和x。
当按下前缀键时,tmux等待再次按下该键,并确定执行了什么tmux命令。此处显示的此类键之间有一个空格:C-b
c
表示先C-b按下前缀键,然后释放它,然后再c按下该键。如有必要,请注意在Ctrl按键后释放键C-b-C-b c与有所不同 C-b C-c。
按下C-b两次会将C-b键发送到在活动窗格中运行的程序。
快捷键说明
常用
快捷键 | 翻译 | 原文 |
---|---|---|
C-b c | 创建一个新窗口 | Create a new window |
C-b % | 水平分割视窗 | Split window horizontally |
C-b " | 垂直分割窗口 | Split window vertically |
C-b f | 搜索窗格 | Search for a pane |
C-b Up | 选择活动窗格上方的窗格 | Select the pane above the active pane |
C-b Down | 选择活动窗格下面的窗格 | Select the pane below the active pane |
C-b Left | 选择活动窗格左侧的窗格 | Select the pane to the left of the active pane |
C-b Right | 选择活动窗格右侧的窗格 | Select the pane to the right of the active pane |
C-b d | 分离当前客户 | Detach the current client |
全部
快捷键 | 翻译 | 原文 |
---|---|---|
C-b C-b | 发送前缀键 | Send the prefix key |
C-b C-o | 旋转窗格 | Rotate through the panes |
C-b C-z | 暂停当前客户 | Suspend the current client |
C-b Space | 选择下一个布局 | Select next layout |
C-b ! | 将窗格中断到新窗口 | Break pane to a new window |
C-b " | 垂直分割窗口 | Split window vertically |
C-b # | 列出所有粘贴缓冲区 | List all paste buffers |
C-b $ | 重命名当前会话 | Rename current session |
C-b % | 水平分割视窗 | Split window horizontally |
C-b & | 退出当前窗口 | Kill current window |
C-b ’ | 提示窗口索引选择 | Prompt for window index to select |
C-b ( | 切换到上一个客户端 | Switch to previous client |
C-b ) | 切换到下一个客户端 | Switch to next client |
C-b , | 重命名当前窗口 | Rename current window |
C-b - | 删除最新的粘贴缓冲区 | Delete the most recent paste buffer |
C-b . | 移动当前窗口 | Move the current window |
C-b / | 描述按键绑定 | Describe key binding |
C-b 0 | 选择窗口0 | Select window 0 |
C-b 1 | 选择窗口1 | Select window 1 |
C-b 2 | 选择窗口2 | Select window 2 |
C-b 3 | 选择窗口3 | Select window 3 |
C-b 4 | 选择窗口4 | Select window 4 |
C-b 5 | 选择窗口5 | Select window 5 |
C-b 6 | 选择窗口6 | Select window 6 |
C-b 7 | 选择窗口7 | Select window 7 |
C-b 8 | 选择窗口8 | Select window 8 |
C-b 9 | 选择窗口9 | Select window 9 |
C-b : | 提示输入命令 | Prompt for a command |
C-b ; | 移至先前活动的窗格 | Move to the previously active pane |
C-b = | 从列表中选择粘贴缓冲区 | Choose a paste buffer from a list |
C-b ? | 列出按键绑定 | List key bindings |
C-b C | 自定义选项 | Customize options |
C-b D | 从列表中选择一个客户 | Choose a client from a list |
C-b E | 均匀地展开窗格 | Spread panes out evenly |
C-b L | 切换到最后一个客户 | Switch to the last client |
C-b M | 清除标记的窗格 | Clear the marked pane |
C-b [ | 进入复制模式 | Enter copy mode |
C-b ] | 粘贴最新的粘贴缓冲区 | Paste the most recent paste buffer |
C-b c | 创建一个新窗口 | Create a new window |
C-b d | 分离当前客户 | Detach the current client |
C-b f | 搜索窗格 | Search for a pane |
C-b i | 显示窗口信息 | Display window information |
C-b l | 选择以前的当前窗口 | Select the previously current window |
C-b m | 切换标记的窗格 | Toggle the marked pane |
C-b n | 选择下一个窗口 | Select the next window |
C-b o | 选择下一个窗格 | Select the next pane |
C-b p | 选择上一个窗口 | Select the previous window |
C-b q | 显示窗格编号 | Display pane numbers |
C-b r | 重画当前客户端 | Redraw the current client |
C-b s | 从列表中选择一个会话 | Choose a session from a list |
C-b t | 显示时钟 | Show a clock |
C-b w | 从列表中选择一个窗口 | Choose a window from a list |
C-b x | 杀死活动窗格 | Kill the active pane |
C-b z | 缩放活动窗格 | Zoom the active pane |
C-b { | 将活动窗格与上方窗格交换 | Swap the active pane with the pane above |
C-b } | 将活动窗格与下面的窗格交换 | Swap the active pane with the pane below |
C-b ~ | 显示讯息 | Show messages |
C-b DC | 重置,以便窗口的可见部分跟随光标 | Reset so the visible part of the window follows the cursor |
C-b PPage | Enter copy mode and scroll up | |
C-b Up | 选择活动窗格上方的窗格 | Select the pane above the active pane |
C-b Down | 选择活动窗格下面的窗格 | Select the pane below the active pane |
C-b Left | 选择活动窗格左侧的窗格 | Select the pane to the left of the active pane |
C-b Right | 选择活动窗格右侧的窗格 | Select the pane to the right of the active pane |
C-b M-1 | 设置水平布局 | Set the even-horizontal layout |
C-b M-2 | 设置偶数垂直布局 | Set the even-vertical layout |
C-b M-3 | 设置主水平布局 | Set the main-horizontal layout |
C-b M-4 | 设置主垂直布局 | Set the main-vertical layout |
C-b M-5 | 选择平铺的布局 | Select the tiled layout |
C-b M-n | 选择带有警报的下一个窗口 | Select the next window with an alert |
C-b M-o | 反向旋转窗格 | Rotate through the panes in reverse |
C-b M-p | 选择带有警报的上一个窗口 | Select the previous window with an alert |
C-b M-Up | 调整窗格大小为5 | Resize the pane up by 5 |
C-b M-Down | 将窗格缩小5 | Resize the pane down by 5 |
C-b M-Left | 调整左窗格大小为5 | Resize the pane left by 5 |
C-b M-Right | 将窗格右移5 | Resize the pane right by 5 |
C-b C-Up | 调整窗格大小 up | Resize the pane up |
C-b C-Down | 调整窗格大小 down | Resize the pane down |
C-b C-Left | 调整窗格大小 left | Resize the pane left |
C-b C-Right | 调整窗格大小right | Resize the pane right |
C-b S-Up | 向上移动窗口的可见部分 | Move the visible part of the window up |
C-b S-Down | 向下移动窗口的可见部分 | Move the visible part of the window down |
C-b S-Left | 向左移动窗口的可见部分 | Move the visible part of the window left |
C-b S-Right | 向右移动窗口的可见部分 | Move the visible part of the window right |
这么多快捷键,终于翻译完成了,如果感觉有用的话,点个赞👍如何?
安装
- macOS安装
brew install tmux
常用命令
显示session列表
tmux ls
激活session
tmux attach -t 0
tmux + iterm2 窗口无法滚动问题
现象:不使用tmux时item2滚动正常,当使用tmux时窗口无法滚动了。
背景:
之前为了使用鼠标滚轮在vim 中翻页做过这样的设置。
使用tmux后,iterm2会把tmux程序当做vim处理,滚动鼠标滚轮会一直输出jkjk之类的。导致无法滚动窗口中的信息。
解决办法:
-
Preferences > Profile > Terminal and check ‘Save lines to scrollback when an app status bar is present’.
-
去掉vim中滚轮自动输入j和k的设置,就可以使用鼠标滚轮滚动了。
-
除了可以使用鼠标滚轮滚动,还可以按 ⌘+PgUp和 ⌘+PgDn来滚动⌘+ ↑ 或⌘+↓
tmux 配置文件不生效 不自动加载配置
首先你可以尝试重启tmux 或者重启系统
可能有时并不能或者不想重启系统或者重启tmux
可以在tmux 模式下的命令行模式下执行 (进入命令行模式的命令 ctrl + b 然后再按个冒号: )
source-file ~/.tmux.conf
主题美化
项目主页
https://github.com/gpakosz/.tmux
修改前缀键
Ctrl + b我按着感觉不太顺手,左手大拇指+左手食指一起按总感觉别扭。在mac下我把win键映射成ctrl的,只有左边有ctrl。我比较常用的按键 Ctrl + b Tab 切换window,就很别扭。全是左手在按,于是就想修改成左右一起按的Alt + 空格。空格也比较好按。
Ctrl + b 修改成 Alt + 空格
set -gu prefix2
unbind m-' '
unbind C-b
set -g prefix m-' '
bind m-' ' send-prefix
同时使用Ctrl b 和 Alt 空格作为前缀
上面修改成Alt+空格后,爽是爽了,但是有时还是会习惯性的按Ctrl + B,那么能不能两个前缀都有用呢?
注释掉上面的内容
set-option -g prefix m-' '
set-option -g prefix2 C-b
这下就爽多了,而且在服务器上这样设置也不影响其他人使用。
窗口从1计数
默认窗口是从0计数的,作为程序员我理解。但我更喜欢从1计数,最关键的是切窗口时,键盘上的1与0是最远距离没有连续性。
# 开始windows 或panes 从1开始而不是 0
set -g base-index 1
setw -g pane-base-index 1
交换窗口位置
ctrl+b
:
# 当前窗口与0交换
swap-window -t 0
# 当前窗口与1交换
swap-window -t 1
把当前窗口移动到0的位置
:move-window -t 0
1、3两个window相互交换
swap-window -s 3 -t 1
参考:https://superuser.com/questions/343572/how-do-i-reorder-tmux-windows
CentOS7安装新版本tmux
https://blog.csdn.net/lxyoucan/article/details/117669196
tmux滚动窗口
Ctrl- b然后,[您可以使用普通的导航键滚动(例如Up Arrow或PgDn)。按q退出滚动模式。
或者,您可以按Ctrl- b PgUp直接进入复印模式并向上滚动一页(这听起来似乎是您大多数时候都想要的)
在vi模式下(请参阅下文),您还可以使用Shift- k和Shift- j(如果您已经处于滚动模式)逐行向上/向下滚动页面。光标不移动,而不移动页面。
https://qastack.cn/superuser/209437/how-do-i-scroll-in-tmux
切换到已运行的会话
tmux attach -t expo
禁用鼠标
set -g mouse off