• Tmuxs -高效使用Linux terminal


    前言

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

    what?

    tmux 是一款优秀的终端复用工具,使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再**“浪费”多余的终端来连接这台远程主机;**

     my fisrst tmux demo
    功能相当丰富,自己慢慢摸索。

    重要概念

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

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

    万言不如一图.

    在这里插入图片描述

    安装

    yum 工程师登场

    yum install -y tmux
    
    
    • 1
    • 2

    Tmux 常用命令

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

    #启动新session:
    $ tmux [new -s 会话名 -n 窗口名]
    
    #恢复session:
    $ tmux at [-t 会话名]
    
    #列出所有sessions:
    $ tmux ls
    
    #关闭session:
    $ tmux kill-session -t 会话名
    
    #关闭整个tmux服务器:更新配置记得需要重启
    $ tmux kill-server
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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	~	列出提示信息缓存
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    窗口(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	快速定位到窗口(输入关键字匹配窗口名称)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    面板(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	显示时钟
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    如何用鼠标调整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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    配置生效

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

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

    参考配置

    自定义配置

    # --------------------------------------------------- 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 -----------------------------------------------------------
    
    • 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
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145

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

    参考

    【1】安装配置
    【2】调整鼠标

  • 相关阅读:
    计算机毕业设计ssm大学生比赛信息管理系统38iiq系统+程序+源码+lw+远程部署
    C++ const修饰的指针
    城市旅游景点信息交流平台的设计与实现 毕业设计-附源码290915
    Git(第一篇)——Git的下载与安装(史上最全最详细)
    [附源码]Python计算机毕业设计SSM教务一点通管理系统(程序+LW)
    二叉树(binary tree)
    qlistwidget不显示内容
    javascript选取元素的范围,可以包含父级,也可以不包含父级
    Java并发常见面试题(二)
    05set注入和构造注入的原理
  • 原文地址:https://blog.csdn.net/MyySophia/article/details/128066108