- 什么是tmux
- 基本概念
- tmux服务器和客户端
- 前缀键
- 快捷键说明
- 安装
- 常用命令
- tmux + iterm2 窗口无法滚动问题
- tmux 配置文件不生效 不自动加载配置
- 主题美化
- 修改前缀键
- 同时使用Ctrl b 和 Alt 空格作为前缀
- 窗口从1计数
- 交换窗口位置
- CentOS7安装新版本tmux
- 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 windowC-b %水平分割视窗Split window horizontallyC-b "垂直分割窗口Split window verticallyC-b f搜索窗格Search for a paneC-b Up选择活动窗格上方的窗格Select the pane above the active paneC-b Down选择活动窗格下面的窗格Select the pane below the active paneC-b Left选择活动窗格左侧的窗格Select the pane to the left of the active paneC-b Right选择活动窗格右侧的窗格Select the pane to the right of the active paneC-b d分离当前客户Detach the current client全部
快捷键翻译原文C-b C-b发送前缀键Send the prefix keyC-b C-o旋转窗格Rotate through the panesC-b C-z暂停当前客户Suspend the current clientC-b Space选择下一个布局Select next layoutC-b !将窗格中断到新窗口Break pane to a new windowC-b "垂直分割窗口Split window verticallyC-b #列出所有粘贴缓冲区List all paste buffersC-b $重命名当前会话Rename current sessionC-b %水平分割视窗Split window horizontallyC-b &退出当前窗口Kill current windowC-b ’提示窗口索引选择Prompt for window index to selectC-b (切换到上一个客户端Switch to previous clientC-b )切换到下一个客户端Switch to next clientC-b ,重命名当前窗口Rename current windowC-b -删除最新的粘贴缓冲区Delete the most recent paste bufferC-b .移动当前窗口Move the current windowC-b /描述按键绑定Describe key bindingC-b 0选择窗口0Select window 0C-b 1选择窗口1Select window 1C-b 2选择窗口2Select window 2C-b 3选择窗口3Select window 3C-b 4选择窗口4Select window 4C-b 5选择窗口5Select window 5C-b 6选择窗口6Select window 6C-b 7选择窗口7Select window 7C-b 8选择窗口8Select window 8C-b 9选择窗口9Select window 9C-b :提示输入命令Prompt for a commandC-b ;移至先前活动的窗格Move to the previously active paneC-b =从列表中选择粘贴缓冲区Choose a paste buffer from a listC-b ?列出按键绑定List key bindingsC-b C自定义选项Customize optionsC-b D从列表中选择一个客户Choose a client from a listC-b E均匀地展开窗格Spread panes out evenlyC-b L切换到最后一个客户Switch to the last clientC-b M清除标记的窗格Clear the marked paneC-b [进入复制模式Enter copy modeC-b ]粘贴最新的粘贴缓冲区Paste the most recent paste bufferC-b c创建一个新窗口Create a new windowC-b d分离当前客户Detach the current clientC-b f搜索窗格Search for a paneC-b i显示窗口信息Display window informationC-b l选择以前的当前窗口Select the previously current windowC-b m切换标记的窗格Toggle the marked paneC-b n选择下一个窗口Select the next windowC-b o选择下一个窗格Select the next paneC-b p选择上一个窗口Select the previous windowC-b q显示窗格编号Display pane numbersC-b r重画当前客户端Redraw the current clientC-b s从列表中选择一个会话Choose a session from a listC-b t显示时钟Show a clockC-b w从列表中选择一个窗口Choose a window from a listC-b x杀死活动窗格Kill the active paneC-b z缩放活动窗格Zoom the active paneC-b {将活动窗格与上方窗格交换Swap the active pane with the pane aboveC-b }将活动窗格与下面的窗格交换Swap the active pane with the pane belowC-b ~显示讯息Show messagesC-b DC重置,以便窗口的可见部分跟随光标Reset so the visible part of the window follows the cursorC-b PPageEnter copy mode and scroll upC-b Up选择活动窗格上方的窗格Select the pane above the active paneC-b Down选择活动窗格下面的窗格Select the pane below the active paneC-b Left选择活动窗格左侧的窗格Select the pane to the left of the active paneC-b Right选择活动窗格右侧的窗格Select the pane to the right of the active paneC-b M-1设置水平布局Set the even-horizontal layoutC-b M-2设置偶数垂直布局Set the even-vertical layoutC-b M-3设置主水平布局Set the main-horizontal layoutC-b M-4设置主垂直布局Set the main-vertical layoutC-b M-5选择平铺的布局Select the tiled layoutC-b M-n选择带有警报的下一个窗口Select the next window with an alertC-b M-o反向旋转窗格Rotate through the panes in reverseC-b M-p选择带有警报的上一个窗口Select the previous window with an alertC-b M-Up调整窗格大小为5Resize the pane up by 5C-b M-Down将窗格缩小5Resize the pane down by 5C-b M-Left调整左窗格大小为5Resize the pane left by 5C-b M-Right将窗格右移5Resize the pane right by 5C-b C-Up调整窗格大小 upResize the pane upC-b C-Down调整窗格大小 downResize the pane downC-b C-Left调整窗格大小 leftResize the pane leftC-b C-Right调整窗格大小rightResize the pane rightC-b S-Up向上移动窗口的可见部分Move the visible part of the window upC-b S-Down向下移动窗口的可见部分Move the visible part of the window downC-b S-Left向左移动窗口的可见部分Move the visible part of the window leftC-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 模式下的命令行模式下执行 (进入命令行模式的命令 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安装新版本tmuxhttps://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
参考
https://github.com/tmux/tmux/wiki
https://www.kancloud.cn/kancloud/tmux/62462