tmux的使用方法和个性化配置

Easter79
• 阅读 709

介绍

tmux是一个优秀的终端复用软件,即使非正常掉线,也能保证当前的任务运行,这一点对于远程SSH访问特别有用,网络不好的情况下仍然能保证工作现场不丢失!此外,tmux完全使用键盘控制窗口,实现窗口的切换功能。

简单地说,tmux对于我主要有两个功能(这应该也是tmux的主要功能):

  1. split窗口。可以在一个terminal下打开多个终端,也可以对当前屏幕进行各种split,即可以 同时打开多个显示范围更小的终端。

  2. 在 使用SSH的环境下,避免网络不稳定,导致工作现场的丢失。想象以下场景, 你在执行一条命令的过程中,由于网络不稳定,SSH连接断开了。这个时候,你就不知道之前 的那条命令是否执行成功。如果此时你打开了很多文件,进入了较深层次的目录,由于网络 不稳定,SSH连接断开。重新连接以后,你又不得不重新打开那些文件,进入那个深层次的 目录。如果使用了tmux,重新连接以后,就可以直接回到原来的工作环境,不但提高了工作 效率,还降低了风险,增加了安全性。

安装

sudo apt-get install tmux

安装完成后输入命令tmux即可打开软件,界面十分简单,类似一个下方带有状态栏的终端控制台;不出意外,这时候你会跟我第一次一样,觉得tmux没什么牛逼的。

会话,窗口,面板

根据tmux的定义,在开启了tmux服务器后,会首先创建一个会话,而这个会话则会首先创建一个窗口,其中仅包含一个面板;也就是说,这里看到的所谓终端控制台应该称作tmux的一个面板,虽然其使用方法与终端控制台完全相同。

tmux使用C/S模型构建,主要包括以下单元模块:

  • server服务器。输入tmux命令时就开启了一个服务器。

  • session会话。一个服务器可以包含多个会话

  • window窗口。一个会话可以包含多个窗口。

  • pane面板。一个窗口可以包含多个面板。

常用按键

这里需要说明一点的是,tmux的任何指令,都包含一个前缀,也就是说,你按了前缀(一组按键,默认是Ctrl+b)以后,系统才知道你接下来的指令是发送给tmux的。

  • C-b ? 显示快捷键帮助

  • C-b C-o 调换窗口位置,类似与vim 里的C-w

  • C-b 空格键 采用下一个内置布局

  • C-b ! 把当前窗口变为新窗口

  • C-b " 模向分隔窗口

  • C-b % 纵向分隔窗口

  • C-b q 显示分隔窗口的编号

  • C-b o 跳到下一个分隔窗口

  • C-b 上下键 上一个及下一个分隔窗口

  • C-b C-方向键 调整分隔窗口大小

  • C-b c 创建新窗口

  • C-b 0~9 选择几号窗口

  • C-b c 创建新窗口

  • C-b n 选择下一个窗口

  • C-b l 切换到最后使用的窗口

  • C-b p 选择前一个窗口

  • C-b w 以菜单方式显示及选择窗口

  • C-b t 显示时钟

  • C-b ; 切换到最后一个使用的面板

  • C-b x 关闭面板

  • C-b & 关闭窗口

  • C-b s 以菜单方式显示和选择会话

  • C-b d 退出tumx,并保存当前会话,这时,tmux仍在后台运行,可以通过tmux attach进入 到指定的会话

配置

我们先来看一下几个配置,这些配置才是我离不开tmux的原因:-)。tmux的配置文件是~/.tmux.conf,这个文件可能不存在,你可以自己新建。下面开始配置,首先,有没有觉得tmux的前缀按起来太不方便了,ctrl与b键隔得太远,很多人把它映射成C+a,也就是在配置文件(~/.tmux.conf)中加入下面这条语句:

#设置前缀为Ctrl + aset -g prefix C-a

与此同时,取消默认的前缀按键:

#解除Ctrl+b 与前缀的对应关系unbind C-b

配置完以后,重启tmux起效,或者先按C+b,然后输入,进入命令行模式,在命令行模式下输入:

source-file ~/.tmux.conf

你也可以跟我一样,在配置文件中加入下面这句话,以后改了只需要按前缀+r了。

#将r 设置为加载配置文件,并显示"reloaded!"信息bind r source-file ~/.tmux.conf \; display "Reloaded!"

关于前缀,很多人都喜欢改成Ctrl+a,不过我个人更喜欢Ctrl+x,如果你是vim用户,你一定懂的。还有就是面板的切换很不方便,需要先按前缀,再按方向键,还记得vim里面怎么切换各个面板的吗?tmux也可以,因为它支持映射。把前缀映射改成Ctrl+x,再加入如下几条语句,现在切换窗口就和vim一摸一样了,顿时觉得亲切了很多。

#upbind-key k select-pane -U#downbind-key j select-pane -D#leftbind-key h select-pane -L#rightbind-key l select-pane -R

上面的最后一条语句会更改C-x l的功能,我挺喜欢这个功能的,因为我们很时候都是在两个窗口或这两个面板中切换,所以我又加入如下语句

#select last windowbind-key C-l select-window -l

现在我的l键可不能随便按了,Ctrl+x l是切换面板,Ctrl+x Ctrl+l切换窗口,Ctrl+l清屏。

复制模式copy-mode

  • 前缀 [ 进入复制模式

  • 按 space 开始复制,移动光标选择复制区域

  • 按 Enter 复制并退出copy-mode。

  • 将光标移动到指定位置,按 PREIFX ] 粘贴

如果把tmux比作vim的话,那么我们大部分时间都是处于编辑模式,我们复制的时候可不可以像vim一样移动呢?只需要在配置文件(~/.tmux.conf)中加入如下行即可。

#copy-mode 将快捷键设置为vi 模式setw -g mode-keys vi

会话

  • C-x s 以菜单的方式查看并选择会话

  • C-x :new-session 新建一个会话

  • C-x d 退出并保存会话

  • 终端运行 tmux attach 返回会话

命名会话

tmux new -s session
tmux new -s session -d #在后台建立会话tmux ls #列出会话tmux attach -t session #进入某个会话

使当前pane 最大化

从我用vim开始,就相信这世界上有些人比你自己还了解你自己想要什么,所以乔老爷子才能做出让世人尖叫的产品,所以我经常浏览高手的.vimrc 文件,我用了tmux不到3天就发现,它怎么不能最大化当前pane?就像vim里的ZommWinPlugin.vim插件一样,你按下某键,当前窗口 就最大化了,获得最大可视界面。当目前为止,就还没有发现我有需求而别人没有的,同样,已有前人找到的解决办法,方法如下:

# zoom pane <-> window#http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/examples/tmux-zoom.shbind ^z run "tmux-zoom"##

滚屏

滚屏要进入copy-mode,即前缀+[,然后就可以用上下键来滚动屏幕,配置了vi快捷键模式,就可以像操作vi一样来滚动屏幕,非常的方便。退出直接按‘q’键即可。

关于配置文件

可以到我的github仓库中clone,其中有相关的使用说明

https://github.com/SBaof/dot-tmux

同时我也是参考其他人的配置文件

http://www.cnblogs.com/scue/p/3705309.html

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
京东云开发者 京东云开发者
6个月前
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k