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 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选择窗口0Select window 0
C-b 1选择窗口1Select window 1
C-b 2选择窗口2Select window 2
C-b 3选择窗口3Select window 3
C-b 4选择窗口4Select window 4
C-b 5选择窗口5Select window 5
C-b 6选择窗口6Select window 6
C-b 7选择窗口7Select window 7
C-b 8选择窗口8Select window 8
C-b 9选择窗口9Select 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 PPageEnter 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调整窗格大小为5Resize the pane up by 5
C-b M-Down将窗格缩小5Resize the pane down by 5
C-b M-Left调整左窗格大小为5Resize the pane left by 5
C-b M-Right将窗格右移5Resize the pane right by 5
C-b C-Up调整窗格大小 upResize the pane up
C-b C-Down调整窗格大小 downResize the pane down
C-b C-Left调整窗格大小 leftResize the pane left
C-b C-Right调整窗格大小rightResize 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

参考

https://github.com/tmux/tmux/wiki

https://www.kancloud.cn/kancloud/tmux/62462

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值