Skip to content

tmux

向军大叔每晚八点在 抖音bilibli 直播

xj-small

tmux 是 linux 中一种管理窗口的程序,它提供了一个 Session 随时存储和恢复的功能。

image-20200108164341247

使用 tmux 可以做到上班时在公司服务器上写代码,下班后 detach 了当前 Session,回到家后登录服务器又 attach 了 Session。

这样在上班时的会话又恢复可用了,这时打开的文件、vim 等和公司是一样的。

软件介绍

tmux 包括会话、窗口、面板三个角色,依次为包含关系。

img

软件安装

使用以下命令安装 tmux,linux 与 mac 都可以使用brew进行安装

# Mac
$ brew install tmux

# Ubuntu 或 Debian
$ sudo apt-get install tmux

# CentOS 或 Fedor可以使用yum/dnf/brew等方式安装,brew版本更高些
$ yum install tmux

风格设置

有个漂亮的风格,会让编程时有不一样的心情

字体图标

执行以下指令安装字体图标到系统中,有些风格需要图标时就可以正常显示了

cd
git clone https://github.com/powerline/fonts.git --depth=1
cd fonts
./install.sh
cd ..
rm -rf fonts

使用的是 item2 需要进行以下设置

image-20200109152424996

安装风格

下面介绍两款风格包

tmux-onedark-theme

大叔喜欢颜色不那么鲜艳的 tmux-onedark-theme 风格

image-20200109160737009

安装方式如下

  1. Clone 项目代码

    cd
    git clone https://github.com/odedlaz/tmux-onedark-theme
  2. 删除原~/.tmux.conf 文件

    rm ~/.tmux.conf
  3. 然后新建 ~/.tmux.conf 文件添加以下内容,如果想显示完整日期就将前 2~4 行注释掉。

    run-shell ~/tmux-onedark-theme/tmux-onedark-theme.tmux
    set -g @onedark_widgets " "
    set -g @onedark_time_format "%I:%M "
    set -g @onedark_date_format "%m/%d"
    set-option -g status-position bottom
  4. 加载配置

    tmux source-file ~/.tmux.conf

gpakosz/.tmux

tmux 的风格包很多,下面介绍 gpakosz/.tmux 风格包的安装方法

Screenshot

通过执行以下命令安装风格,之后通过修改 ~/.tmux.conf.local 来定义界面

cd
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .

重新加载 tmux 配置项以使风格生效

tmux source-file ~/.tmux.conf

快速上手

因为 tmux 命令较多,所以先掌握以下这些,用的时候再来从后面的命令中查找。

# 新建会话
tmux new -s hdcms
# 查看会话
ctrl+b s
# 重命名会话
Ctrl+b $

# 创建窗口
ctrl+b c
# 切换到2号窗口
ctrl+b 2
# 重命名窗口
ctrl+b ,
# 关闭窗口
ctrl+b &

# 水平拆分出一个新窗格
ctrl+b %
# 垂直拆分窗格
ctrl+b "
# 切换到下一个窗格
ctrl+b o
# 关闭窗格
ctrl+b x

指令列表

会话管理

会话是最大的单位,包含窗口与窗格

命令说明快捷键
tmux new -s <session-name>创建会话
tmux detach退出当前会话,会话进程仍然在后台运行Ctrl+b d
tmux ls查看当前所有的 会话Ctrl+b s
tmux attach -t <session-name>重新接入某个已存在的会话
tmux kill-session杀死某个会话
tmux switch -t <session-name>切换会话
tmux rename-session重新命名会话Ctrl+b $
tmux at -d重绘窗口,在不同屏幕上保持窗口为最小尺寸

tmux 默认会同步会话到所有窗口,并使用尺寸最小窗口的尺寸,这会造成大窗口有小点。

image-20200123210737845

使用以下方式来解决

tmux at -d #简写为 tmux a -d

窗口管理

窗口属于会话,窗口包含多个窗格

命令说明快捷键
tmux new-window -n <window-name>创建新窗口Ctrl+b c
tmux select-window -t <window-name>切换窗口
tmux rename-window <new-name>重命名当前窗口Ctrl+b ,

切换窗口快捷键

快捷键说明
Ctrl+b p切换到上一个窗口(按照状态栏上的顺序)
Ctrl+b n切换到下一个窗口
Ctrl+b <number>切换到指定编号的窗口,number 是状态栏上的窗口编号
Ctrl+b w从列表中选择窗口
ctrl+b &关闭当前窗口
ctrl+b x删除窗口

窗格管理

拆分窗格

命令说明
tmux split-window -h划分左右两个窗格
tmux split-window划分上下两个窗格

移动窗格

命令说明
tmux select-pane -U光标切换到上方窗格
tmux select-pane -D光标切换到下方窗格
tmux select-pane -L光标切换到左边窗格
tmux select-pane -R光标切换到右边窗格
tmux swap-pane -U当前窗格上移
tmux swap-pane -D当前窗格下移

窗格快捷键

快捷键说明
Ctrl+b %划分左右两个窗格
Ctrl+b "划分上下两个窗格
Ctrl+b ;切换到上一个窗格
Ctrl+b o光标切换到下一个窗格
Ctrl+b {当前窗格左移
Ctrl+b }当前窗格右移
Ctrl+b Ctrl+o当前窗格上移
Ctrl+b Alt+o当前窗格下移
Ctrl+b x关闭当前窗格
Ctrl+b !将当前窗格拆分为一个独立窗口
Ctrl+b z当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+b q显示窗格编号
Ctrl+b Alt+方向键调整窗格大小

滚动窗口

tmux 滚动窗口需要通过指令操作

快捷键说明
Ctrl+b [ (按 q 退出滚动模式)滚动窗口

保存会话

默认情况下当重起系统后,需要重新定义 tmux 窗口,这很不是方便。

安装插件

我们需要安装 tmptmux-resurrect插件

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
git clone https://github.com/tmux-plugins/tmux-resurrect ~/.tmux/plugins/resurrect

修改配置文件 ~/.tmux.conf添加以下内容

# 自动保存会话
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-save-interval '15'
set -g @continuum-restore 'on'
set -g @resurrect-capture-pane-contents 'on'
run '~/.tmux/plugins/tpm/tpm'

run-shell ~/.tmux/plugins/resurrect/resurrect.tmux

返回终端重新加载配置项

tmux source ~/.tmux.conf

然后执行命令安装插件

prefix + I

保存会话

插件安装后就可以管理会话了,下例中的 prefix 就是.tmux.conf 文件中定义的 prefix

保存会话

prefix + Ctrl-s

恢复会话

prefix + Ctrl-r

大叔配置

下面是我配置好的~/.tmux.conf文件内容,但要注意里面有插件的配置,所以需要保证已经安装了相关插件。

run-shell ~/tmux-onedark-theme/tmux-onedark-theme.tmux

#set -g @onedark_widgets "houdunren.com < B站/抖音@后盾人 #(ip)"
set -g @onedark_widgets "后盾人 #(ip)"
set -g @onedark_time_format "%I:%M"
set -g @onedark_date_format "%m:%d"
#set -g @onedark_date_format "%m:%d"
set-option -g default-terminal "screen-256color"
set -g default-terminal "screen-256color"

# 解决neovim中esc响应慢
set -s escape-time 0
set-option -g status-position bottom

# 自动保存会话
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-save-interval '15'
set -g @continuum-restore 'on'
set -g @resurrect-capture-pane-contents 'on'
run '~/.tmux/plugins/tpm/tpm'

run-shell ~/.tmux/plugins/resurrect/resurrect.tmux

# 解除默认前缀
unbind C-b
# 设置自定义前缀
set -g prefix C-f
# 采用vim的操作方式
setw -g mode-keys vi
# 窗口序号从1开始计数
set -g base-index 1
# 开启鼠标模式
set-option -g mouse on

# 通过前缀+KJHL快速切换pane
#up
bind-key k select-pane -U
#down
bind-key j select-pane -D
#left
bind-key h select-pane -L
#right
bind-key l select-pane -R

常见问题

更改主机名

如果状态栏显示的主机名错误,请执行以下命令重新设置主机名

image-20220419210955996

sudo scutil --set HostName houdunren

鼠标滚动无效

  1. ctrl+b
  2. :进入命令模式
  3. 输入 set -g mouse on 回车