记得第一次接触tmux是在一年前,当时是为了复用终端,不想开多个item2的tab,可是后来发现彻底不会用,就一直搁在那儿,直到半年前再次拿起来,开始学习一些tmux的用法,现在半年过去了,真正的明白了为何说tmux是神器。linux
在用tmux以前一直都是用的iterm2(在mac上很好用的终端)原生的新开tab和分屏,其实也还好,界面看起来就像这样:git
可是分屏不少以后,能够看到不少状态栏,并非很美观,对比tmux的分屏,看起来就要hack不少,tmux的分屏界面以下:github
正是基于这个缘由,开始学着始使用tmux。chrome
tmux的仓库:github.com/tmux/tmuxvim
首先安装tmux:缓存
# mac安装
brew install tmux
# linux 安装
sudo apt-get install tmux
复制代码
开始学习tmux以前首先要明确几个概念:session
简单来讲就是:session包含window,window包含pane布局
安装完成后,在终端直接输入tmux
便可进入tmux。进入以后能够看到session的名字是0,这是由于咱们直接输入tmux
会建立一个无名的会话,若是想要新建session的时候给session命名,可使用如下命令:学习
tmux new -s your-session-name
复制代码
若是想要断开当前session可使用ui
tmux detach # 断开当前会话
复制代码
或者使用快捷键[prefix]+d
,其中prefx
默认为ctrl+b
退出session以后,想要恢复以前工做的区域,直接在终端输入:
tmux attach-session -t your-session-name
# 能够简写
tmux a -t your-session-name
复制代码
其中session-name
是可选的,若是不输入,默认进入第一个会话。
使用完成后,要关闭,可使用tmux kill
命令,kill
有如下四种:
kill-server
:关闭sessions,clients和server,这个命令会将tmux建立的都关闭kill-session
kill-window
kill-pane
# 关闭session
tmux kill-session -t your-session-name
# 关闭全部
tmux kill-server
复制代码
tmux list-session
# 简写
tmux ls
复制代码
或者使用快捷键prefix+s
查看全部session,prefix+w
查看全部window。
tmux的配置在~/.tmux.conf
文件中,若是没有该文件,能够先新建配置文件。
前面介绍session使用的时候,提到过一些快捷键,能够看到都是prefix+xxx
的形式,这里的prefix
是tmux的前缀键,默认为ctrl+b
,只有按下prefix
,才会激活tmux,而后再按其余键进行tmux操做,这样作的一个好处是能够有效的避免和其余应用快捷键的冲突。
可是若是常常用tmux,就会发现ctrl
和b
这两个键按的不是很舒服,咱们是否能够修改一个更加舒服的前缀键呢?固然是能够的,只须要在tmux的配置文件中解绑原有的prefix
并修改为咱们自定义的便可。配置以下:
set -g prefix C-a
# 解绑原有的prefix
unbind C-b
bind C-a send-prefix
复制代码
配置完成后,须要重启tmux,或者按下ctrl+b
,而后输入:
进入命令模式,输入:
source-file ~/.tmux.conf
复制代码
或者咱们给让配置生效添加快捷键:
bind r source-file $HOME/.tmux.conf \; display-message 'Config reloaded'
复制代码
这样,直接输入prefix+r
就可让配置生效。
在tmux中,水平和竖直分屏默认快捷键为prefix+"
和 prefix+%
,这两个键能够说不多用并且不容易按到,咱们能够自定义本身习惯的快捷键,对于对vim熟悉的用户,能够将其设置为跟vim同样的快捷键:
bind C-h splitw -v -c '#{pane_current_path}'
bind C-v splitw -h -c '#{pane_current_path}'
复制代码
这里的splitw
实际上是split-window
的缩写,-c '#{pane_current_path}'
表示在打开新pane的时候,默认进入当前目录。
在iterm2中,切换标签的快捷键是commond+option+方向键
或commond+[
或commond+]
,相应的在tmux中,切换pane默认快捷为prefix+方向键
可是方向键自己和ctrl
离的太远,操做不方便,一样的咱们能够设置本身喜欢的快捷键,例如设置跟vim同样的快捷键(这里多说一句,其实在vim中最经常使用的控制方向的键就是hjkl,若是习惯使用vim,能够设置tmux与之相同快捷键)。
bind h select-pane -L # up
bind j select-pane -D # down
bind k select-pane -U # left
bind l select-pane -R # right
复制代码
在刚上手tmux的时候,总以为各类命令很麻烦,并且很差记,若是支持鼠标就更好了,其实想要支持鼠标,只须要在配置文件中开启便可:
set-option -g mouse on
复制代码
开启鼠标以后,切换pane能够直接点击激活,调整分屏大小能够直接拖拽实现。
固然了,既然使用了tmux,目的就不仅是界面好看而已,而是要提升效率,因此尽可能少用鼠标😏
若是想要使用快捷键调节pane大小,一样能够设置快捷键实现:
bind H resize-pane -L 10 # 向左扩展10
bind L resize-pane -R 10 # 向右扩展10
bind K resize-pane -U 5 # 向上扩展5
bind J resize-pane -D 5 # 向下扩展5
复制代码
这样经过prefix+HJKL
实现pane的扩展
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b | ? | 显示快捷键帮助文档 |
Ctrl+b | d | 断开当前会话 |
Ctrl+b | D | 选择要断开的会话 |
Ctrl+b | Ctrl+z | 挂起当前会话 |
Ctrl+b | r | 强制重载当前会话 |
Ctrl+b | s | 显示会话列表用于选择并切换 |
Ctrl+b | : | 进入命令行模式,此时可直接输入ls等命令 |
Ctrl+b | [ | 进入复制模式,按q退出 |
Ctrl+b | ] | 粘贴复制模式中复制的文本 |
Ctrl+b | ~ | 列出提示信息缓存 |
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b | c | 新建窗口 |
Ctrl+b | & | 关闭当前窗口(关闭前需输入y or n确认) |
Ctrl+b | 0~9 | 切换到指定窗口 |
Ctrl+b | p | 切换到上一窗口 |
Ctrl+b | n | 切换到下一窗口 |
Ctrl+b | w | 打开窗口列表,用于且切换窗口 |
Ctrl+b | , | 重命名当前窗口 |
Ctrl+b | . | 修改当前窗口编号(适用于窗口从新排序) |
Ctrl+b | f | 快速定位到窗口(输入关键字匹配窗口名称) |
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b | " | 当前面板上下一分为二,下侧新建面板 |
Ctrl+b | % | 当前面板左右一分为二,右侧新建面板 |
Ctrl+b | x | 关闭当前面板(关闭前需输入y or n确认) |
Ctrl+b | z | 最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增) |
Ctrl+b | ! | 将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效) |
Ctrl+b | ; | 切换到最后一次使用的面板 |
Ctrl+b | q | 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板 |
Ctrl+b | { | 向前置换当前面板 |
Ctrl+b | } | 向后置换当前面板 |
Ctrl+b | Ctrl+o | 顺时针旋转当前窗口中的全部面板 |
Ctrl+b | 方向键 | 移动光标切换面板 |
Ctrl+b | o | 选择下一面板 |
Ctrl+b | 空格键 | 在自带的面板布局中循环切换 |
Ctrl+b | Alt+方向键 | 以5个单元格为单位调整当前面板边缘 |
Ctrl+b | Ctrl+方向键 | 以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖) |
Ctrl+b | t | 显示时钟 |