目录
典型的命令行使用方式
打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session)。
会话的一个重要特点是,窗口与其中启动的进程是绑定的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
因此SSH 登录远程计算机,打开一个远程窗口执行命令,如果网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离。
tmux基本用法
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它可以让新窗口"接入"已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
Tmux 的快捷键前缀(Prefix)
为了使自身的快捷键和其他软件的快捷键互不干扰,Tmux 提供了一个快捷键前缀。当想要使用快捷键时,需要先按下快捷键前缀,然后再按下快捷键。Tmux 所使用的快捷键前缀默认是组合键 "Ctrl-b"(同时按下 Ctrl 键和 b 键)。例如,假如你想通过快捷键列出当前 Tmux 中的会话(对应的快捷键是 s),那么你只需要做以下几步:
- 按下组合键 "Ctrl-b" (Tmux 快捷键前缀)
- 放开组合键 "Ctrl-b"
- 按下 "s" 键
快捷键前缀可以根据个人使用习惯而设置,比如若要将快捷键前缀变更为 "Ctrl-a" ,请将以下配置加入到 Tmux 的配置文件 ~/.tmux.conf 中:(不建议这么做,vim中Ctrl+a已经被定义)
unbind C-b
set - g prefix C-a
Tmux 的配置文件
每当开启一个新的会话时,Tmux 都会先读取 ~/.tmux.conf 这个文件。该文件中存放的就是对 Tmux 的配置。
新配置生效
- 重启tmux起效
-
或者先按 "Ctrl-b" ,然后输入":",进入命令行模式,在命令行模式下输入:
source-file ~/.tmux.conf
- 如果你希望新的配置项能够立即生效,那么你可以将下面这一行配置加入到文件 ~/.tmux.conf 中。
# bind a reload key
bind r source-file ~/.tmux.conf \; display -message "Reloaded Configure!"
这样配置了之后,每当向 ~/.tmux.conf 文件中添加了新的配置,只需要按下 "Ctrl-b r" 就可以重新加载配置并使新的配置生效,从而免去了开启一个新的会话。
VI模式
Tmux 中可以使用与 Vim 极为相似的方式在文本间移动光标,用 k
键可以将光标移动到上一行,用 w
键可以向后移动一个单词等等,而且还可以通过把 Tmux 设为 vi 模式,使其与 Vim 的操作更加接近。为此,需要将以下配置加入到文件 ~/.tmux.conf 中
# Use vim keybindings in copy mode
setw -g mode-keys vi
复制模式copy-mode
- 按 "Ctrl-b [" 进入复制模式
- 按 space 开始复制,移动光标选择复制区域
- 按 Enter 复制并退出copy-mode。
- 将光标移动到指定位置,按 "Ctrl-b [" 粘贴
鼠标设置
#滚屏
set-window-option -g mode-mouse on # (setw其实是set-window-option的别名)
setw -g mouse-resize-pane on # 开启用鼠标拖动调节pane的大小(拖动位置是pane之间的分隔线)
setw -g mouse-select-pane on # 开启用鼠标点击pane来激活该pane
setw -g mouse-select-window on # 开启用鼠标点击来切换活动window(点击位置是状态栏的窗口名称)
setw -g mode-mouse on # 开启window/pane里面的鼠标支持(也即可以用鼠标滚轮回滚显示窗口内容,此时还可以用鼠标选取文本)
鼠标复制粘贴
#开启鼠标支持
set-option -g mouse on
复制:按住 shift 键,然后拖动鼠标复制要选择的内容,然后按下 shift+ctrl+c ,复制到系统剪贴板
粘贴:按下 shift+ctrl+v 粘贴系统剪贴板中的内容到Tmux中
需要注意的是:
shift+ctrl+v 是在终端设置的粘贴快捷键
shift+ctrl+c 是在终端设置的复制快捷键
需要根据你的终端配置的复制粘贴快捷键来进行操作
~/.tmux.conf 例子:
set -g prefix C-b
#set -g prefix C-a
set -g base-index 1
#set -g renumber -windows on
#set-option -g base-index 1
#set-option -g renumber -windows on
set -g history-limit 79999999
#set -g default-terminal "xterm-256color"
set -g default-terminal "screen-256color"
set-option -ga terminal-overrides ",*256col*:Tc"
#unbind C-b
#bind -n Home send-key C-a
#bind -n End send-key C-e
#bind-key -n Home send Escape "OH"
#bind-key -n End send Escape "OF"
bind-key k select-pane -U # up
bind-key j select-pane -D # down
bind-key h select-pane -L # left
bind-key l select-pane -R # right
bind r source-file ~/.tmux.conf
setw -g mode-keys vi
#bind -r - splitw -v -c '#{pane_current_path}'
bind r - splitw -v
bind r | splitw -h
bind r c new-window
bind -r b kill-pane
#bind -r x confirm kill-session
bind -r x confirm detach-client
bind -r v confirm kill-window
#set -g mouse-select-window on
#set -g mouse-select-pane on
#set -g mouse-resize-pane on
set -g mouse on
#set -g mode-mouse on
bind r source-file ~/.tmux.conf \; display "Reloaded configure!"
Tmux会话
启动会话
tmux # 启动
tmux kill-server # 关闭
可以为每个特定的项目创建一个专用的Tmux会话。
#启动会话,在terminal中输入:
tmux new -s <session-name>
分离及接入会话
如果暂时不想在会话中工作,但后续还会用到这个这个会话,可以在会话中按下 "Ctrl-b d" 或在会话窗口中输入 “tmux detach” 将这个会话与terminal分离,放入后台,需要使用的时候再调出来:
#分离当前会话
tmux detach
#重新接入已经存在的会话
#使用会话编号
tmux attach -t 0
#使用会话名称
tmux attach -t <session-name>
#or
tmux a -t <session-name>
杀死会话
如果不再需要这个会话,可以将这个会话杀死:
#关闭上次打开的会话
tmux kill-session
#使用会话编号
tmux kill-session -t 0
#使用会话名称
tmux kill-session -t <session-name>
#关闭除s1外的所有会话
tmux kill-session -a -t s1
#关闭所有会话
tmux kill-server
查看创建的所有会话
tmux ls
#or
tmux list-session
切换会话
如果想切到其他的会话:
#使用会话编号
tmux switch -t 0
#使用会话名称
tmux switch -t <session-name>
重命名会话
tmux rename-session -t <old-name> <new-name>
Tmux窗口操作
创建窗口
一个Tmux 会话中可以启动多个窗口(window),启动一个Tmux会话默认会启动一个窗口,编号是0
,可以在会话中按下 "Ctrl-b c" 创建新的窗口,第二个窗口的编号是1
,以此类推。
#新建一个窗口
tmux new-window
#新建一个指定名称的窗口
tmux new-window -n <window-name
切换窗口
#切换到指定编号的窗口
tmux select-window -t <window-number>
#切换到指定名称的窗口
tmux select-window -t <window-name>
可以将切换窗口设置成vim模式
bind-key k select-pane -U # up
bind-key j select-pane -D # down
bind-key h select-pane -L # left
bind-key l select-pane -R # right
重命名窗口
tmux rename-window <new-name>
Tmux窗格操作
划分窗格
每个窗口还可以划分成多个窗格(pane),每个窗格运行不同的命令,可以在窗口中按下 "Ctrl-b ”" 水平分割窗口,或 "Ctrl-b %" 垂直分割窗口,或输入命令:
#分割窗口,在Tmux会话的窗口中输入:
#划分上下两个窗格
tmux split-window
#划分左右两个窗格
tmux split-window -h
切换窗格
#光标切换到上方窗格
tmux select-pane -U
#光标切换到下方窗格
tmux select-pane -D
#光标切换到左边窗格
tmux select-pane -L
#光标切换到右边窗格
tmux select-pane -R
交换窗格位置
#当前窗格上移
tmux swap-pane -U
#当前窗格下移
tmux swap-pane -D
移动窗格
#移动pane合并至某个window
Ctrl-b :join-pane -t $window_name
Tmux的快捷键
Ctrl-b ? | 显示帮助信息(在按 Esc 或 q 退出帮助) |
Ctrl-b : | 进入命令行模式 |
Ctrl-b s | 以菜单方式显示和选择会话 |
Ctrl-b d | Detach当前会话,放入后台 |
Ctrl-b D | Detach指定会话 |
Ctrl-b c | 创建一个新窗口,状态栏会显示多个窗口的信息 |
Ctrl-b p | 切换到上一个窗口(按照状态栏上的顺序) |
Ctrl-b n | 切换到下一个窗口 |
Ctrl-b l | 切换到上一个操作的窗口 |
Ctrl-b & | 关闭当前窗口 |
Ctrl-b , | 重命名当前窗口 |
Ctrl-b $ | 重命名当前会话 |
Ctrl-b . | 将窗口移动到指定编号(1,2,3...)位置 |
Ctrl-b 0~9 | 切换到指定编号的窗口,其中的0~9是状态栏上的窗口编号 |
Ctrl-b ‘ | 切换至指定编号(可大于9)的窗口 |
Ctrl-b w | 以菜单方式显示及选择窗口 |
Ctrl-b f | 根据显示的内容搜索窗格 |
Ctrl-b % | 垂直分屏,分成左右两个窗格 |
Ctrl-b ” | 水平分屏,分成上下两个窗格 |
Ctrl-b <arrow key> | 光标切换到其他窗格。<arrow key> 是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓ |
Ctrl-b ; | 光标切换到上一个操作的窗格 |
Ctrl-b o | 顺时针切换窗格 |
Ctrl-b { | 当前窗格与上一个窗格交换位置 |
Ctrl-b } | 当前窗格与下一个窗格交换位置 |
Ctrl-b Ctrl+o | 所有窗格向前移动一个位置,第一个窗格变成最后一个窗格(逆时针旋转当前窗口的窗格) |
Ctrl-b Alt+o | 所有窗格向后移动一个位置,最后一个窗格变成第一个窗格(顺时针旋转当前窗口的窗格) |
Ctrl-b <space> | 重新排列当前窗口下的所有窗格 |
Ctrl-b x | 关闭当前窗格 |
Ctrl-b ! | 将当前窗格拆分为一个独立窗口 |
Ctrl-b z | 当前窗格全屏显示,再使用一次会变回原来大小 |
Ctrl-b Ctrl+<arrow key> | 按箭头方向调整窗格大小 |
Ctrl-b q | 显示窗格编号 |
Ctrl-b t | 在当前窗格显示时间 |
Ctrl-b i | 显示当前窗格信息 |
其他命令
#列出所有快捷键,及其对应的 Tmux 命令, 等同于"Ctrl-b ?"
tmux list-keys
#列出所有 Tmux 命令及其参数
tmux list-commands
#列出当前所有 Tmux 会话的信息
tmux info
#重新加载当前的 Tmux 配置
tmux source-file ~/.tmux.conf
参考
tmux常用命令与快捷键_tmux窗口搜索关键字-优快云博客