# tmux
tmux是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台而的终端复用软件。使用了tmux,你就可以在一个终端中同时运行多个会话,只需开启一个终端。
### 为什么使用tmux
如果只是分隔屏幕,配色的变化,其实客户端item2以及screen就已经很好了。那我们为什么要使用tmux呢?
为什么使用tmux:
- 保持会话: 断开ssh或关闭电脑,你的ssh可以重新连接,能够保持你的工作环境连续性。前提实在服务器端装上tumx
使用tmux会话的分离与连接就可以轻松解决以上问题,分离(detach)可以使终端会话在后台运行,连接(attach)可以重新打开在后台运行的会话,也可以多个终端连接同一会话。
### 安装
### Mac
`brew install tmux`即可
### Linux
`yum install tmux`类似命令即可
### Windows
Windows下可以使用cygwin来安装 cygwin,cygwin是图形安装界面,请确保在 Select Packages 界面出现时,选中 tmux 即可。
### tmux的基本概念
启动之后,可以看到命令行最底部多了一条绿色的状态条,上面显示了一些信息,比如计算机名和时间等。
### Session(会话)
一组窗口的集合,通常用来概括同一个任务。session可以有自己的名字便于任务之间的切换。
### Window(窗口)
单个可见窗口。Windows有自己的编号,也可以认为和ITerm2中的Tab类似。
当你新建一个会话的时候,tmux 已经自动给你在新会话中自动创建了一个窗口(Window),窗口的编号从`0`开始,名称则默认为当前工作目录或者当前运行的程序,都显示在下方的状态条中。如下图所示,我将工作目录切换到了`~/Documents`,窗口`0`的名称也随之变换。
### Pane(窗格)
tmux 下可以有多个会话,会话下又可以有多个窗口,那么同样,窗口下还可以有多个窗格, 一个窗口可以切分成多个窗格,主要的切分方法有两种,垂直切分和水平切分。
### tmux的基本操作
前置操作(`Prefix-Command`),所有下面介绍的快捷键,都必须以前置操作开始。tmux默认的前置操作是`CTRL+b`。
### 会话相关
- 新建会话(create): `tmux new-session -s <会话名称>` or `tmux new -s <会话名称>`
- 分离会话(detach): `prefix d`,退出tmux但是不关闭掉进程,方便下次进入
- 连接会话(attach): `tmux attach -t <目标会话名>` or `tmux a -t <目标会话名>`, 被分离的会话,还可以重新连接上
- `tmux ls`: 列出所有的会话
- `prefix $`: 重命名当前会话
### 窗口相关
- `tmux new -n <窗口名>`: 创建会话的时候附上 `-n` 参数,来给窗口制定一个名称
- 新建窗口: `prefix c`
- 上一个窗口(previous): `prefix p`
- 下一个窗口(next): `prefix n`
- 切换到上一个活动的窗口: `prefix space`
- 使用窗口号切换: `prefix 窗口号`
- 窗口列表: `prefix w`
- 关闭一个窗口: `prefix &`
- 更改窗口名称: `prefix ,`
### 窗格相关
- 查看所有窗格的编号: `prefix q`
- 垂直切分(把窗口垂直切分成左右两等分):`prefix %`
- 水平切分(把窗口水平切分成上下两等分):`prefix "`
- 窗格切换: `prefix o`
- 按制定方向切换窗格: `prefix 方向键`
- 更改窗格布局: `prefix 空格`, 可以在这五个默认的窗格布局之中轮流切换:
- 水平平分(even-horizontal)
- 垂直平分(even-vertical)
- 主窗格最大化,其他窗格水平平分(main-horizontal)
- 主窗格最大化,其他窗格垂直平分(main-vertical)
- 平铺,窗格均等分(tiled)
### 参考资料
- [Tmux - Linux从业者必备利器](http://cenalulu.github.io/linux/tmux/)
- [图灵: tmux入门](http://www.ituring.com.cn/minibook/10707)
- 介紹
- 程序员基础知识
- 字符编码
- 技术名词
- 语义化版本
- 命名规范
- 书写文档
- 开源协议
- 目录结构
- 正则表达式
- 平凡之路
- 数据结构与算法
- 堆和栈
- 浮点数类型
- XML和JSON
- 算法学习之路
- 排序算法
- 代码架构
- 设计模式
- 常用的Javascript设计模式
- 面向对象编程
- 继承
- 多态
- 封装
- 面向接口编程
- 代码评审
- 六种量化你代码的方式
- 程序员必备的代码审查(Code Review)清单
- 服务器部署
- AWS简介
- 网络知识
- HTTPS, SPDY和 HTTP/2性能的简单对比
- HTTP状态码
- 懂点设计
- 佳作赏析
- 无缝平铺
- Sketch学习
- 设计与实现的平衡
- 写点东西
- 使用gitbook
- 合格的PM
- 一个好的产品经理
- 产品经理的技能
- 团队合作
- 关于招聘
- 培训新人
- 领导能力
- 获取知识
- MOOC
- Podcasts
- 英语学习
- 设计学习
- 前端学习
- iOS学习
- 游戏开发
- 关注健康
- 过劳检测
- 关于睡眠
- 提升效率
- 学会阅读
- 学会提问
- 善用搜索
- 学会写作
- 时间管理
- 知识管理
- 文件管理
- 密码管理
- 制作视频
- 制作PPT
- 论音乐对效率的影响
- 程序员效率指南
- SOHO
- 创业资源
- Hacker
- 保护隐私
- 关于工作
- 找工作前需要思考的问题
- 原则与技巧
- 关于简历
- 其他方面
- 硬件相关
- 常用软件
- Windows
- 硬件配置
- 系统安装
- 常用软件
- Mac
- 通用设置
- 权限问题
- alias设置
- 常用软件
- 开发环境
- 快捷键设置
- 常用终端命令
- dotfiles
- Android
- 常用软件
- 如何登录美国区GooglePlay
- 开发工具
- git
- EditorConfig
- node
- shadowsocks
- ST3--Windows篇
- ST3--Mac篇
- gulp
- 字体的选择
- Emacs
- WebStorm
- tmux
- Sketch
- Sketch中文学习资料
- Trello
- 使用Trello管理项目的经验
- git进阶
- 15分钟学会使用Git和远程代码库
- GitHub秘籍
- JetBrains
- IDE设置
- 附录
- 计算机科学与技术
- 网站
- 书籍
- 工具