TMUX入门

TMUX

Terminal Multiplexer

终端复用软件,类似GNU screen,但比screen更出色。tmux来自于OpenBSD,采用BSD授权

使用它最直观的好处就:

  • 通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机
  • 还有一个好处就是当终端关闭后该shell里面运行的任务进程也会随之中断,通过使用tmux就能很容易的解决这个问题。

使用场景:

  1. 关闭终端,再次打开时原终端里面的任务进程依然不会中断 ;
  2. 处于异地的两人可以对同一会话进行操作,一方的操作另一方可以实时看到 ;
  3. 可以在单个屏幕的灵活布局下开出很多终端,然后就能协作地使用它们 ;

操作

0 基础

  1. 单独运行tmux命令,即开启一个tmux会话 ;
  2. 不能在tmux会话里面再新建会话,会报错:”sessions should be nested with care, unset $TMUX to force”
  3. 快捷键前缀唤醒词:^B(ctrl + b)

1 会话管理

1)新建会话

1
tmux new  -s  <session-name>

也可以直接tmu new,但不推荐

2)查看已经创建的会话:ls

1
2
3
tmux ls
# or
tmux list-session

3)进入一个已知会话

1
2
3
4
5
6
# 使用会话编号
tmux attach -t 0 # 0 是会话名称
#or
tmux a -t 0
# 使用会话名称
tmux attach -t <session-name>

4)暂离当前会话:detach

1
tmux detach

或快捷键:^B + d

5)切换会话:switch

1
2
3
4
# 使用会话编号
tmux switch -t 0
# 使用会话名称
tmux switch -t <session-name>

6)重命名会话:rename-session

1
tmux rename-session -t 0 <new-name>

上面命令将0号会话重命名

5)关闭会话:kill-session

在会话外/内

1
tmux  kill-session  -t  SESSION-NAME/SESSION-NUM

6)关闭所有会话与重启:kill-server

删除所有会话

1
tmux kill-server

重启

1
tmux kill-server && tmux

其他快捷键

  • 切换会话:^B + s

2 窗口(windows)操作

1)新建窗口

1
2
3
$ tmux new-window
# 新建一个指定名称的窗口
$ tmux new-window -n <window-name>

2)切换窗口

1
2
3
4
# 切换到指定编号的窗口
$ tmux select-window -t <window-number>
# 切换到指定名称的窗口
$ tmux select-window -t <window-name>

3)重命名窗口

1
$ tmux rename-window <new-name>

4)其他快捷键

  • 创建窗口^B + c
  • 切换到上一个窗口(按照状态栏上的顺序):^B + p
  • 切换到下一个窗口:^B + n
  • 切换到指定窗口:^B + <number>
  • 窗口重命名:Ctrl+b ,
  • 查看所有窗口:Ctrl+b w

4 分屏与窗格(pane)

基础快捷键

  • 水平分屏:^B + %
  • 垂直分屏:^B + "
  • 切换窗口:^B + 上下左右
  • 调整窗口大小:^B按住 + 上下左右
  • 切换光标:^B + o
  • 光标不变切换窗口^B按住 + o
  • 关闭当前窗格:^B + x
    或快捷键:^D
    或命令:exit

3 快捷键总结

  • 帮助:^B + ?
  • 分离当前会话:^B + d
  • 列出所有会话/切换会话:^B + s
  • 重命名当前会话:^B + $
  • 创建窗口^B + c
  • 切换到上一个窗口(按照状态栏上的顺序):^B + p
  • 切换到下一个窗口:^B + n
  • 切换到指定窗口:^B + <number>
  • 窗口重命名:Ctrl+b ,
  • 从列表中选择窗口:Ctrl+b w
  • 水平分屏:^B + %
  • 垂直分屏:^B + "
  • 切换窗口:^B + 上下左右
  • 调整窗口大小:^B按住 + 上下左右
  • 切换光标:^B + o
  • 光标不变切换窗口^B按住 + o
  • 关闭当前窗格:^B + x
  • 当前窗格全屏:Ctrl+b z
  • 关闭所有分屏后的窗口,即合并为一个窗口Ctrl+b !
  • 当前窗格与上一个窗格交换位置:Ctrl+b {
  • 当前窗格与下一个窗格交换位置:Ctrl+b }
  • 所有窗格向前移动一个位置,第一个窗格变成最后一个窗格:Ctrl+b Ctrl+o
  • 所有窗格向后移动一个位置,最后一个窗格变成第一个窗格:Ctrl+b Alt+o
  • 窗格显示时间^B + t
  • 显示窗格编号:^B + q
  • 命令行模式:^B + :

4 其他用法精炼

1)窗格显示时间^B + t

2)列出所有快捷键:tmux list-keys

3)列出所有命令与参数:tmux list-command

4)列出当前所有 Tmux 会话的信息信息:tmux info

5)重新加载当前的 Tmux 配置:tmux source-file ~/.tmux.conf

6)显示窗格编号:^B + q

7)命令行模式(类似vim命令行):^B + :

8)翻页

  • 方法一,进入翻页模式:
    • ^B + B:进入翻页模式
    • PgUP / PgDn:上下翻页
  • 方法二,直接翻页:
    • ^B + PgUP / PgDn:上下翻页
  • 方法三,修改tmux.conf实现鼠标翻页
  • 方法四,修改tmux.conf的:set-window-option mode-keys vi实现vi格式的翻滚,快捷前缀为shift

5 .tmux.conf

1)翻页

1
2
3
4
5
set-option -g mouse on  #For tmux version 2.1 and up

set -g mode-mouse on #For tmux versions < 2.1

set -g terminal-overrides 'xterm*:smcup@:rmcup@' # Sane scrolling 启用本机xterm滚动

然后将当前所有tmux窗口全部关闭,在tmux打开就可以了

重要说明:此设置中断突出显示和复制文本。使用Shift +单击以维护此功能

下面可能是一个比较完善的解决方案?

1
2
3
set -g mouse on
" sane scrolling:
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e; send-keys -M'

参考文章:


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!