tmux
tmux是一个终端复用工具,允许用户在一个终端会话中同时管理多个终端窗口,提高了终端使用效率,尤其在服务器上进行远程管理时更加实用。在tmux中,可以创建多个终端窗口和窗格,并在这些窗口和窗格之间自由切换,还可以在后台运行会话,即使在终端断开连接后也可以继续操作,这非常有用,特别是在长时间运行的命令中。
包管理器进行安装。可以使用以下命令安装:
操作系统 | 安装命令 |
---|---|
Arch Linux | pacman -S tmux |
Debian or Ubuntu | apt install tmux |
Fedora | dnf install tmux |
RHEL or CentOS | yum install tmux |
macOS (using Homebrew | brew install tmux |
macOS (using MacPorts) | port install tmux |
openSUSE | zypper install tmux |
tmux 的几个名词session, window , pane 在这里我们就把他们分别叫做会话,窗口,窗格 。
关于session 很多人都叫会话,个人感觉叫任务更贴切,更形象。
通常我们在终端中操作一个任务的时候,一旦终端关闭,任务也就结束了,被强制关闭了,在 tmux 中 使用 session 就可以解决这个问题,我们可以把当前操作的任务隐藏起来,在视觉上让它消失,任务继续执行着,当我们想返回任务做一些操作的时候,它可以很方便的回来,我们通常把上面的操作就做 session 操作,我们可以把 session 给隐藏起来,我们也可以把 session 给真的关掉。
在 tmux 中有一个窗口的概念,我们可以这样要去理解窗口:当前呈现在我们面前的这一个工作区域就是一个窗口(当前的终端界面),窗口可以被不断切割,切割成一个个小块,这一个个小块我们叫做窗格(pane),这就是窗口和窗格的概念,我们把它想象成一块大蛋糕可以切成很多小块蛋糕,窗口可以被分割成很多小的窗格。
总结: 一个 session 通常指一个任务里面可以有很多窗口,一个窗口又可以有很多的窗格。
基本操作
命令 | 描述 |
---|---|
tmux | 启动一个新的tmux 会话 |
tmux new-session -s <session-name> | 创建一个具有指定名称的新会话 |
tmux attach -t <session-name> | 附加到一个已存在的会话 |
tmux switch-client -n | 切换到下一个会话 |
tmux switch-client -p | 切换到上一个会话 |
tmux list-sessions | 显示当前所有会话的列表 |
tmux detach | 从当前会话中分离 |
tmux kill-session -t <session-name> | 结束指定的会话 |
窗口操作
命令 | 描述 |
---|---|
tmux new-window | 在当前会话中创建一个新窗口 |
tmux select-window -t <window-index> | 选择指定索引的窗口 |
tmux next-window | 切换到下一个窗口 |
tmux previous-window | 切换到上一个窗口 |
tmux list-windows | 显示当前会话的所有窗口列表 |
tmux rename-window <new-name> | 重命名当前窗口 |
tmux kill-window -t <window-index> | 关闭指定索引的窗口 |
面板操作
命令 | 描述 |
---|---|
tmux split-window | 在当前窗口中水平分割面板(垂直创建新面板) |
tmux split-window -h | 在当前窗口中垂直分割面板(水平创建新面板) |
tmux select-pane -t <pane-index> | 选择指定索引的面板 |
tmux select-pane -U | 切换到上面的面板 |
tmux select-pane -D | 切换到下面的面板 |
tmux select-pane -L | 切换到左边的面板 |
tmux select-pane -R | 切换到右边的面板 |
tmux kill-pane -t <pane-index> | 关闭指定索引的面板 |
tmux swap-pane -s <src-pane> -t <dst-pane> | 交换两个面板的位置 |
tmux setw synchronize-panes | 同步所有面板中的输入(再次执行此命令将取消同步) |
快捷键
快捷键 | 描述 | |
---|---|---|
会话<session> | prefix d | 分离当前会话 |
prefix s | 列出所有会话 | |
prefix $ | 重命名当前会话 | |
窗口<window> | prefix c | 创建一个新窗口,状态栏会显示多个窗口信息 |
prefix p | 切换到上一个窗口 | |
prefix n | 切换到下一个窗口 | |
prefix <number> | 切换到指定编号的窗口 | |
prefix w | 从列表中选择窗口 | |
prefix , | 重命名窗口 | |
窗格<pane> | prefix % | 划分左右两个窗格 |
prefix " | 划分上下两个窗格 | |
prefix ; | 光标移动到上一个窗格 | |
prefix o | 光标移动到下一个窗格 | |
prefix { | 当前窗格与上一个窗格换位 | |
prefix } | 当前窗格与下一个窗格换位 | |
prefix x | 关闭当前窗格 | |
prefix ! | 将当前窗格拆分为一个独立的窗格 | |
prefix z | 当前窗格全屏显示,再使用一次会变回原来的大小 | |
prefix q | 显示窗格编号 |
配置
Unix系统上许多软件(vim, tmux)不是一成不变的,而是有了各种配置、插件后才更强大。那么,怎样找到优秀的配置呢?Github是一个好地方,搜索tmux,可以找到许多高星的配置:
- gpakosz/.tmux
- tony/tmux-config
- dracula/dracula-theme
如果刚开始学tmux,你当然可以直接使用它们。但是,其中有许多自定义配置是几乎不可能用到的。遵循少即是多的原则,笔者选择根据自己的需求定义配置。因此,建议你也构建自己的dotfiles,不断维护它们,形成自己的配置体系。
以下是一些常用的tmux插件,它们可以提高tmux的使用体验并增强其功能:
- Tmux Resurrect:可以在tmux崩溃或关闭会话时自动保存和恢复会话状态的插件。官方网站:https://github.com/tmux-plugins/tmux-resurrect
- Tmuxinator:可以创建和管理tmux会话的命令行工具。官方网站:https://github.com/tmuxinator/tmuxinator
- Tmux Open:可以轻松地从tmux会话中打开文件或URL的插件。官方网站:https://github.com/tmux-plugins/tmux-open
- Tmux Sidebar:可以在tmux会话的侧边栏中显示各种信息,如系统资源、时间和日期等。官方网站:https://github.com/tmux-plugins/tmux-sidebar
- Tmux CPU:可以在tmux状态栏中显示CPU使用率的插件。官方网站:https://github.com/tmux-plugins/tmux-cpu
- Tmux Battery:可以在tmux状态栏中显示电池电量和充电状态的插件。官方网站:https://github.com/tmux-plugins/tmux-battery
- Tmux Yank:可以在tmux和系统剪贴板之间复制和粘贴文本的插件。官方网站:https://github.com/tmux-plugins/tmux-yank
- Tmux Copycat:可以帮助您在tmux缓冲区中搜索和复制文本的插件。官方网站:https://github.com/tmux-plugins/tmux-copycat
以上是一些常用的tmux插件,它们可以提高tmux的使用体验并增强其功能。您可以访问它们的官方网站了解更多信息,也可以使用TPM管理器轻松安装和管理它们。
我使用的 tmux 配置
# mouse mod
set -g mouse off
#run-shell ~/tmux-better-mouse-mode/scroll_copy_mode.tmux
#set -g @scroll-speed-num-lines-per-scroll 10
# cpu memory display
#set -g status-interval 3
#set -g status-right "#(vmstat -SM 1 2 | awk 'END {print \"cpu:\"100-$15\"%\" \" mem:\"512-$4-$5-$6\"M\"}')#[default] %R"
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# github
set -g @plugin 'github_username/plugin_name'
set -g @plugin 'github_username/plugin_name#branch'
set -g @plugin 'git@github.com:user/plugin'
# Other examples:
set -g @plugin 'tmux-plugins/tmux-sidebar'
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.config/tmux/plugins/tpm/tpm'