tmux -高效使用Linux terminal

简介: 这个利器绝对可以提升工作效率,因为你会发现日常工作中切换terminal会耗费你大量的时间,花上1-2个小时打磨一下这个利器,会事半功倍,绝对值得.

前言

这个利器绝对可以提升工作效率,因为你会发现日常工作中切换terminal会耗费你大量的时间,花上1-2个小时打磨一下这个利器,会事半功倍,绝对值得.

what?

tmux 是一款优秀的终端复用工具,使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再**“浪费”多余的终端来连接这台远程主机;**6804e6284de94a2a8b4bf881057904bd.png功能相当丰富,自己慢慢摸索。

重要概念

在tmux逻辑中,需要分清楚Server > Session > Window > Pane这个大小和层级顺序是极其重要的,直接关系到工作效率:

  • Server:是整个tmux的后台服务。有时候更改配置不生效,就要使用tmux kill-server来重启tmux。
  • Session:是tmux的所有会话。我之前就错把这个session当成窗口用,造成了很多不便里。一般只要保存一个session就足够了。
  • Window:相当于一个工作区,包含很多分屏,可以针对每种任务分一个Window。摸鱼一个Window,干活一个window。
  • Pane:是在Window里面的小分屏。最常用也最好用,可以调试、监控一起看

万言不如一图.89db524452364ccc892d5db778a1e0a4.png

安装

yum 工程师登场

yum install -y tmux

Tmux 常用命令

这些命令解决的是你如何进去以及如何销毁zmux进程创建的session

#启动新session:
$ tmux [new -s 会话名 -n 窗口名]
#恢复session:
$ tmux at [-t 会话名]
#列出所有sessions:
$ tmux ls
#关闭session:
$ tmux kill-session -t 会话名
#关闭整个tmux服务器:更新配置记得需要重启
$ tmux kill-server

Tmux 常用内部命令

所谓内部命令,就是进入Tmux后,并按下前缀键后的命令,一般前缀键为Ctrl+b. 虽然ctrl和b离得很远但是不建议改前缀键,因为别的键也不见得方便好记不冲突。还是记忆默认的比较可靠。

系统指令:#
前缀  指令  描述
Ctrl+b  ? 显示快捷键帮助文档
Ctrl+b  d 断开当前会话
Ctrl+b  D 选择要断开的会话
Ctrl+b  Ctrl+z  挂起当前会话
Ctrl+b  r 强制重载当前会话
Ctrl+b  s 显示会话列表用于选择并切换
Ctrl+b  : 进入命令行模式,此时可直接输入ls等命令
Ctrl+b  [ 进入复制模式,按q退出
Ctrl+b  ] 粘贴复制模式中复制的文本
Ctrl+b  ~ 列出提示信息缓存

窗口(window)指令:

前缀  指令  描述
Ctrl+b  c 新建窗口
Ctrl+b  & 关闭当前窗口
Ctrl+b  0~9 切换到指定窗口
Ctrl+b  p 切换到上一窗口
Ctrl+b  n 切换到下一窗口
Ctrl+b  w 打开窗口列表,用于且切换窗口
Ctrl+b  , 重命名当前窗口
Ctrl+b  . 修改当前窗口编号(适用于窗口重新排序)
Ctrl+b  f 快速定位到窗口(输入关键字匹配窗口名称)

面板(pane)指令:

前缀  指令  描述
Ctrl+b  " 当前面板上下一分为二,下侧新建面板
Ctrl+b  % 当前面板左右一分为二,右侧新建面板
Ctrl+b  x 关闭当前面板(关闭前需输入y or n确认)
Ctrl+b  z 最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增)
Ctrl+b  ! 将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效)
Ctrl+b  ; 切换到最后一次使用的面板
Ctrl+b  q 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板
Ctrl+b  { 向前置换当前面板
Ctrl+b  } 向后置换当前面板
Ctrl+b  Ctrl+o  顺时针旋转当前窗口中的所有面板
Ctrl+b  方向键 移动光标切换面板
Ctrl+b  o 选择下一面板
Ctrl+b  空格键 在自带的面板布局中循环切换
Ctrl+b  Alt+方向键 以5个单元格为单位调整当前面板边缘
Ctrl+b  Ctrl+方向键  以1个单元格为单位调整当前面板边缘(Mac下
Ctrl+b  t 显示时钟
Ctrl+b  " 当

如何用鼠标调整pane大小

这样鼠标和键盘可以配合使用。个人建议还是用键盘好一点,可以更专注。

# 开启用鼠标拖动调节pane的大小(拖动位置是pane之间的分隔线)
setw -g mouse-resize-pane on 
# 开启用鼠标点击pane来激活该pane
setw -g mouse-select-pane on
# 开启用鼠标点击来切换活动window(点击位置是状态栏的窗口名称)
setw -g mouse-select-window on
# 开启window/pane里面的鼠标支持(也即可以用鼠标滚轮回滚显示窗口内容,此时还可以用鼠标选取文本)
setw -g mode-mouse on

fac52c3761f94bffbe2a2b02b9f95d9a.png

配置生效

如果没有~/.tmux.conf 这个文件,可以手动创建即可.

在tmux中可以通过

bind r source-file ~/.tmux.conf \; display-message "Config reloaded.."

参考配置

自定义配置

# --------------------------------------------------- Tmux Config -----------------------------------------------------------
# --------------------------------------------------- prefix -----------------------------------------------------------
# 修改指令前缀
set -g prefix C-f #
unbind C-f # C-b 即 Ctrl+b 键,unbind 意味着解除绑定
bind C-f send-prefix # 绑定 Ctrl+f 为新的指令前缀
# 从tmux v1.6版起,支持设置第二个指令前缀
# set-option -g prefix2 ` # 设置一个不常用的`键作为指令前缀,按键更快些
# 添加载在配置文件指令为: r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded.."
# --------------------------------------------------- 更改新增面板键 -----------------------------------------------------------
unbind '"'
bind - splitw -v -c '#{pane_current_path}' # 垂直方向新增面板,默认进入当前目录
unbind %
bind =  splitw -h -c '#{pane_current_path}' # 水平方向新增面板,默认进入当前目录
# --------------------------------------------------- 开启鼠标支持 -----------------------------------------------------------
# v2.1及以上的版本
set-option -g mouse on
# --------------------------------------------------- vim 风格 -----------------------------------------------------------
# 绑定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个单元格
# 复制模式更改为 vi 风格
# 进入复制模式 快捷键:prefix + [
setw -g mode-keys vi # 开启vi风格后,支持vi的C-d、C-u、hjkl等快捷键
# --------------------------------------------------- 复制粘贴 -----------------------------------------------------------
# 复制模式向 vi 靠拢
#旧版本:
#bind -t vi-copy v begin-selection  # 绑定v键为开始选择文本
#bind -t vi-copy y copy-selection # 绑定y键为复制选中文本
# 新版本:
bind -T copy-mode-vi v send -X begin-selection # 开始复制
bind -T copy-mode-vi y send -X copy-selection # 复制剪切板
bind p pasteb # 绑定p键为粘贴文本(p键默认用于进入上一个窗口,不建议覆盖)
# --------------------------------------------------- 其他 -----------------------------------------------------------
#设置窗口面板起始序号
set -g base-index 1 # 设置窗口的起始下标为1
set -g pane-base-index 1 # 设置面板的起始下标为1
set -s focus-events on
set-window-option -g automatic-rename on
set-window-option -g monitor-activity on
# --------------------------------------------------- 状态栏 -----------------------------------------------------------
set -wg window-status-format " #I #W " # 状态栏窗口名称格式
set -wg window-status-current-format " #I:#W#F " # 状态栏当前窗口名称格式(#I:序号,#w:窗口名称,#F:间隔符)
set -wg window-status-separator "" # 状态栏窗口名称之间的间隔
set -g message-style "bg=#202529, fg=#91A8BA" # 指定消息通知的前景、后景色
# 自定义状态栏
set -g status-interval 1 # 状态栏刷新时间
set -g status-justify left # 状态栏列表左对齐
setw -g monitor-activity on # 非当前窗口有内容更新时在状态栏通知
# --------------------------------------------------- linux -----------------------------------------------------------
# set -g status-left "Zorn #W" # 状态栏左侧内容
# set -g status-fg yellow # 设置状态栏前景黄色
# set -g status-style "bg=black, fg=yellow" # 状态栏前景背景色
# set -g status-right 'zorn@machine #{continuum_status}' # 状态栏右侧内容
# set -g status-left-length 300 # 状态栏左边长度300
# set -g status-right-length 500 # 状态栏左边长度500
# set -wg window-status-current-style "bg=black" # 状态栏当前窗口名称的样式
# set -wg window-status-current-style "bg=red" # 状态栏当前窗口名称的样式
# set -wg window-status-last-style "fg=red" # 状态栏最后一个窗口名称的样式
set -g status-left "🐶 #W" # 状态栏左侧内容
# --------------------------------------------------- mac -----------------------------------------------------------
# rainbar
# set-option -g status-utf8 on
set -g status-right '#(rainbarf)'
# Gnome Terminal
# set -g status-right '#(rainbarf --rgb)'
# Status bar
# powerline
set -g status-bg black
set-option -g status on
set-option -g status-interval 1
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 "#(~/.config/tmux/tmux-powerline/powerline.sh left)"
set-window-option -g window-status-current-format '#[fg=Magenta,bold] #I #W:#F'
# --------------------------------------------------- fzf_panes ----------------------------------------------------
set-hook -g pane-focus-in "run -b 'bash ~/.config/tmux/fzf_panes.tmux update_mru_pane_ids'"
bind-key -n M-n run -b 'bash ~/.config/tmux/fzf_panes.tmux new_window'
# --------------------------------------------------- one colors ---------------------------------------------------
# Add truecolor support
set-option -ga terminal-overrides ",xterm-256color:Tc"
# Default terminal is 256 colors
set -g default-terminal "screen-256color"
# --------------------------------------------------- End -----------------------------------------------------------

重启 tmux restart tmux 或者 在 tmux 窗口中,先按下 Ctrl+b 指令前缀,然后按下系统指令:,进入到命令模式后输入 source-file ~/.tmux.conf,回车后生效。

参考

【1】安装配置

【2】调整鼠标

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
Linux
terminal 输出转义字符 linux echo
terminal 输出转义字符 linux echo
61 0
|
6月前
|
运维 网络协议 Unix
Linux终端(Terminal)与控制台(Console)的区别
Linux终端(Terminal)与控制台(Console)的区别
257 0
Linux terminal 终端快捷键
Linux terminal 终端快捷键
|
Linux
LINUX进阶(基础篇)之虚拟机下Terminal下大小写混乱的解决方法
LINUX进阶(基础篇)之虚拟机下Terminal下大小写混乱的解决方法
549 0
LINUX进阶(基础篇)之虚拟机下Terminal下大小写混乱的解决方法
|
Linux Shell 网络安全
Mac Terminal ssh连接linux服务器中文乱码
整理了近期在项目上做的一些技术研究,希望与大家共同探讨交流。 场景:Mac OSterminal 本地中文显示正常ssh 登陆linux,服务器中文显示乱码 尝试解决:方法1. (未解决)在本地与服务器执行 locale 命令, 发现字符编码一致,都是 zh_CN.UTF-8。
4092 0
|
Linux 网络安全 开发工具
Linux/Mac OS 个人常用Terminal技巧整理
刚开始接触linux有些不适应,走了不少弯路,一直没有系统的学过linux应用,基本都是零零散散Google出来的知识,在这里做个整理:   Vi/Vim 基本操作: 刚开始接触linux时,不懂vi吃了不少亏.
1797 0
|
7天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
31 3
|
7天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
26 2
|
15天前
|
缓存 监控 Linux

热门文章

最新文章

下一篇
无影云桌面