tmux指令入门笔记

此为记录tmux指令以及快捷键的笔记,不包含如何安装

笔记来源


概念

tmux采用C/S模型构建,输入tmux命令就相当于开启了一个服务器,此时默认将新建一个会话(session),然后会话中默认新建一个窗口(window),窗口中默认新建一个面板(pane),所以,彻底退出tmux的话所有的session就全没了

示意图

  • 会话(session): 建立一个 tmux 工作区会话,会话可以长期驻留,重新连接服务器不会丢失,我们只需重新 tmux attach 到之前的工作区就可以恢复会话
  • 窗口(window): 容纳多个窗格
  • 窗格(pane): 可以在窗口中分成多个窗格

说明

本笔记使用的tmux版本为2.9,操作系统为MacOS10.15,仿真终端为iTerm2,配置文件在 ~/.tmux.conf

tmux指令输入途径有如下几种 (以下不明确写出则为快捷键)

  • 非tmux默认以tmux开始
  • 快捷键默认以 ctrl-b 开始
  • 指令模式默认以ctrl-b + : 开始

可以修改默认起始快捷键(此处修改为ctrl-a)

1
2
3
4
5
# 修改完成更新配置
# tmux source-file ~/.tmux.conf
set -g prefix C-a #
unbind C-b # C-b即Ctrl+b键,unbind意味着解除绑定
bind C-a send-prefix # 绑定Ctrl+a为新的指令前缀

Session

创建session

  • 新建一个无名称的会话:tmux
  • 新建一个名称为demo的会话:tmux new -s demo
  • 指令模式:new -s demo
  • 快捷键:未知

重命名session

  • 快捷键:$
  • 指令模式:rename-session [-t current-name] [new-name]

离开session

  • tmux detach
  • 指令模式:detach
  • 快捷键:d
  • 快捷键:D 选择要断开的对话

列出所有session

  • tmux ls
  • tmux list-session
  • 指令模式:ls
  • 快捷键模式(同时可以选择切换):sw(这个也会列出session中的所有的window)

进入session

  • tmux a -t <session-name>
  • 指令模式:attach -t <session-name>

杀死session

  • 杀死一个session:tmux kill-session -t demo
  • 杀死全部session:tmux kill-server

Window

  • 创建新窗口:c
  • 关闭窗口:&
  • 修改窗口信息
    • 名字:,
    • 顺序:.
  • 打开窗口列表切换窗口:w
  • 其他切换切换
    • 按照编号切换:0-9
    • 设置从1开始:set -g base-index 1
    • 切换到上一窗口:p
    • 切换到下一窗口:n
    • 快速定位:f

Pane

创建面板

  • 上下一分为二:"
  • 左右一分为二:%

移动面板

  • 将面板在新窗口打开:!
  • 向前置换当前面板:{
  • 向后置换当前面板:}
  • 顺时针旋转当前窗口中的所有面板:Ctrl+o
  • 在自带的面板布局中循环切换:空格键

选择面板

  • 当前窗口面板:q
  • 所有session所有window中的面板:w
  • 移动光标切换面板:方向键
  • 选择下一面板:o

其他

  • 修改面板大小:Alt+方向键
  • 关闭面板:x
  • 最大化面板:z
  • 显示时钟:t

指令

复制粘贴

  • 进入复制模式快捷键:[
  • 按下空格开始复制
  • 移动光标复制
  • 按下回车键结束复制
  • 粘贴复制的内容快捷键:]

对Buffer的操作(指令模式)

  • 展示所有的 buffers:list-buffers
  • 保存tmux的buffer缓存到本地:save-buffer path
  • 粘贴buffer内容到会话中:paste-buffer

增强体验

增加鼠标支持

在配置文件中添加

1
set-option -g mouse on

设为vi模式

在配置文件中添加

1
set-window-option -g mode-keys vi

修复mac下部分系统指令丢失的bug

恢复用户空间,首先安装依赖

1
brew install reattach-to-user-namespace

在配置文件中添加

1
set -g default-command "reattach-to-user-namespace -l $SHELL"​​

保存session状态

首先安装相关依赖

1
2
3
cd ~/.tmux
mkdir plugins
git clone https://github.com/tmux-plugins/tmux-resurrect.git

然后修改配置文件

1
run-shell ~/.tmux/plugins/tmux-resurrect/resurrect.tmux​
  • 保存 ctrl-b ctrl-s
  • 恢复 ctrl-b ctrl-r

使用Mac的粘贴板

恢复用户空间,首先安装依赖

1
brew install reattach-to-user-namespace

修改配置文件

1
2
3
4
# 绑定y键为复制选中文本到Mac系统粘贴板
bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'reattach-to-user-namespace pbcopy'
# 鼠标拖动选中文本,并复制到Mac系统粘贴板
bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"

添加状态栏

erikw/tmux-powerline

效果如下

样例


配置文件

这是我的tmux配置文件,不包含对 tmux-powerline 的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 对插件 tmux-powerline 进行配置
set-option -g status on
set-option -g status-interval 2
set-option -g status-justify "centre"
set-option -g status-left-length 60
set-option -g status-right-length 90
set-option -g status-left "#(~/cmd/tmux-powerline/powerline.sh left)"
set-option -g status-right "#(~/cmd/tmux-powerline/powerline.sh right)"

set-option -g mouse on # 打开鼠标支持
set-window-option -g mode-keys vi # 绑定vim快捷键
set -g default-command "reattach-to-user-namespace -l $SHELL" # 修复mac下的bug

set -g base-index 1 # 设置窗口的起始下标为1
set -g pane-base-index 1 # 设置面板的起始下标为1

# 切换快捷键绑定
set -g prefix C-a #
unbind C-b # C-b即Ctrl+b键,unbind意味着解除绑定
bind C-a send-prefix # 绑定Ctrl+a为新的指令前缀

# 绑定hjkl键为面板切换的上下左右键
bind -r k select-pane -U # 绑定k为↑
bind -r j select-pane -D # 绑定j为↓
bind -r h select-pane -L # 绑定h为←
bind -r l select-pane -R # 绑定l为→

# 绑定Ctrl+hjkl键为面板上下左右调整边缘的快捷指令
bind -r ^k resizep -U 10 # 绑定Ctrl+k为往↑调整面板边缘10个单元格
bind -r ^j resizep -D 10 # 绑定Ctrl+j为往↓调整面板边缘10个单元格
bind -r ^h resizep -L 10 # 绑定Ctrl+h为往←调整面板边缘10个单元格
bind -r ^l resizep -R 10 # 绑定Ctrl+l为往→调整面板边缘10个单元格

# 复制模式中使用Mac系统的粘贴板
# 绑定y键为复制选中文本到Mac系统粘贴板
bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'reattach-to-user-namespace pbcopy'
# 鼠标拖动选中文本,并复制到Mac系统粘贴板
bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"

# 保存tmux会话
run-shell ~/.tmux/plugins/tmux-resurrect/resurrect.tmux

# 开启256 colors支持
set -g default-terminal "screen-256color"

# 关闭默认的rename机制
setw -g automatic-rename off
setw -g allow-rename off