tmux
tmux
是什么?一个工具,是linux中的一种管理窗口的程序。
tmux提供了多标签和分割窗体的功能,提供了一个窗体组随时存储和恢复的功能。
基本概念
- Session: 会话,一组窗口的组合,通常用来概括统一任务。有自己的名字。
- Window:窗口,单个可见窗口,有自己的编号。
- Pane: 窗格,被划分成小块的窗口。
借个图:
Mac下安装
1 | brew install tmux |
tmux基本操作
Prefix-Command前置操作:所有下面介绍的快捷键,都必须以前置操作开始。tmux默认的前置操作是CTRL+b。例如,我们想要新建一个窗体,就需要先在键盘上摁下CTRL+b,松开后再摁下n键。
下面所有的prefix均代表CTRL+b
pane
prefix | % | 水平分割 |
prefix | : | 竖直分割 |
prefix | z | 放大当前pane |
prefix | 方向键 | 切换 |
prefix | ctrl+ 方向键 | |
prefix | : | 竖直分割 |
prefix | o | 依次切换当前窗口下的各个pane。 |
prefix | Space (空格键) | 对当前窗口下的所有pane重新排列布局,每按一次,换一种样式。 |
prefix | x | 关闭当前使用中的pane。 |
Windows
prefix | c | 创建 |
prefix | 数字 | 移动 |
Prefix | p | (p for previous):切换到上一个window。 |
Prefix | n | (n for next): 切换到下一个window。 |
Prefix | 0 | : 切换到0号window,依次类推,1、2、3… |
Prefix | w | (w for windows):出当前session所有window,通过上、下键可以选择切换到指定window。 |
prefix | & | 关闭 |
prefix | , | 重命名 |
Session
tmux ls | ||
tmux attach | 如果你已经创建了一个或多个会话,但是还没有运行 Tmux,那么可以输入如下命令以接入已开启的会话 | |
tmux attach -t [name-of-session] | 回到session | |
tmux new -s [name-of-session] | 创建时命名 | |
tmux new-session -s [name-of-session] | 创建时命名 | |
tmux kill-session -t [name-of-session] | 关闭session | |
tmux a -t [name-of-session] | a/attach 重新连接叫做name的session | |
tmux a | 只有一个session会快速连接 | |
tmux kill-session -a -t [name-of-my-session] | 删除除了name意外的所有session | |
new -s [name-of-session] | 创建一个新的会话 | |
prefix + $ | 重命名 | |
prefix + d / exit | 在只有一个window下输入 | |
prefix + s | 获取现有session的列表 |
主题美化
需要先安装相应主题。
https://github.com/VimrcMac/.tmux
1 | # you may want to backup your existing ~/.tmux.conf first |
Configuration
配置文件不存在的话需要创建: touch ~/.tmux.conf
Send prefix
把prefix的ctrl+b变为了ctrl+a,因为这样按起来方便些。基本上用tmux的都改了这个。
1 | # Send prefix |
Use Alt-arrow keys to switch panes
不用按prefix,直接用alt+箭头在pane之间switch。实际用过之后才发现真是太方便了!
1 | # Use Alt-arrow keys to switch panes |
Shift arrow to switch windows
不用按prefix,直接用shift+箭头在window之间switch。太方便了!
1 | # Shift arrow to switch windows |
Mouse mode
开启鼠标模式。用鼠标就能切换window,pane,还能调整pane的大小,方便!
1 | # Mouse mode |
Set easier window split keys
这一部分是用来更方便切分pane的。prefix + v 代表竖着切,prefix + h 代表横着切。比起默认的切割方法不仅直观而且方便。
1 | # Set easier window split keys |
Easy config reload
下一次如果修改了.tmux.conf的设置的话,不用关掉tmux。直接用prefix+r,就能重新加载设置。
1 | # Easy config reload |
在文本间移动光标
在 Tmux 中可以使用与 Vim 极为相似的方式在文本间移动光标。正如你熟知的那样,用 k 键可以将光标移动到上一行,用 w 键可以向后移动一个单词等等。而且还可以通过把 Tmux 设为 vi 模式,使其与 Vim 的操作更加接近。为此,需要将以下配置加入到文件 ~/.tmux.conf 中。
1 | # Use vim keybindings in copy mode |
将复制下来的文本发送到系统的剪贴板中
在默认情况下,当从 Tmux 中复制文本时,复制下来的文本只能粘贴到同一个 Tmux 会话中。若要使复制下来的文本可以粘贴到任何位置,就需要让 Tmux 将文本复制到系统的剪贴板。为此,我们需要这样做:
安装 retach-to-user-namespace。用 brew 安装的话将会非常简单,只需要运行下面这条命令:
1 | brew install reattach-to-user-namespace |
选择并复制文本
首先按下
Ctrl-b
[ 进入复制模式,然后可以看到一小段高亮的文本出现在了屏幕的右上角 (“[0/0]”)
使用空格键(space)开始内容选取,回车键(Enter)进行拷贝,
然后使用 “ctrl-b ]” 进行粘贴。
1 | # invoke reattach-to-user-namespace every time a new window/pane opens |
使用vim快捷键
使用 v 开始选择, y 复制
1 | # start selecting text typing 'v' key (once you are in copy mode) |
高效的结对编程
Tmate 是一个 Tmux 的管理工具,使用它不但能够轻松地创建 Tmux 会话而且还能够通过互联网把该会话共享给其他人。若要使用 Tmate 共享 Tmux 会话,请按照以下步骤操作:
安装tmate
1
brew update && brew tap nviennot/tmate && brew install mate
开启一个新的会话
1
tmate
- 从 Tmux 的会话中复制由 Tmate 产生的 SSH URL。请注意屏幕下方的信息“[tmate] Remote session: ssh …”
调整 Tmux 以增强其同 Vim 的集成度
调整背景的配色方案
将下面配置添加到 .vimrc 文件
1 | if exists('$TMUX') |
调整光标的形状
在默认情况下,当通过 Tmux 运行 Vim 时,无论当前 Vim 是处于插入模式、可视模式还是其他模式,光标的形状都是一样的。这样就很难判断当前的 Vim 模式是什么。若要避免这个问题,就需要让 Tmux 通知 iTerm 更新光标的形状。为此,需要将以下配置加入到文件 ~/.vimrc 中。
这里有问题,需要注意,如果您在Tmux会话中使用Vim,则需要双重转义t SI / t EI中的代码。 TODO
1 |
|
调整粘贴时的文本缩进
在 Vim 中粘贴文本时可能会遇到这样的问题,有时文本的缩进会发生变化,特别是在粘贴大量的文本时,这个问题会更加明显。虽然可以通过在粘贴前执行 :set nopaste 来解决这个问题,但是这里还有一种更好的解决方法。就是把下面这段配置加入到配置文件 ~/.vimrc 中,这样 Vim 就会自动地阻止粘贴文本时的自动缩进。
https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode
Tmuxinator
为项目自动创建会话。Tmuxinator 是一个ruby的gem包,客用户创建Tmux会话。Tmuxinator现在配置文件中定义会话中的细节,然后用命令创建这些会话。
安装
1
gem install tmuxinator
创建
1
2
3# mux
tmuxinator new project_a
# 回车之后,会自动打开文件 `~/.tmuxinator/project_a.yml`
更新配置文件
1
2
3
4
5
6
7
8
9
10name: project_a
root: <the-folder-of-project-A>
windows:
- server: <command-to-start-application-server>
- editor:
layout: even-horizontal
panes:
- vim
- <command-to-launch-tests-guard>
- shell: ''
启动会话
1
2
3
4
5tmuxinator start project_a
# or
tmuxinator start project_a
1 | # .tmux.conf |
Iterm2 常用快捷键
1 | ⌘ + 数字 : 各 tab 标签切换 |
tmux 常用快捷键
1 |
|