五分钟学会tmux

5分钟快速学习上手tmux;tmux你看懂这一篇就够了…

啥是tmux

一句话,将传统的命令行终端中窗口(window, 即一个terminal的视窗)与会话(session,泛指人机交互行为,比如一个SSH长连接任务)分离的工具。macos下安装:

1
brew install tmux

用tmux啥好处

  • 第一,方便分离窗口和会话,使得离开窗口不影响会话;
  • 第二,方便整合工作环境,根据需求划分不同的命令行环境(比如,做一个python开发环境下的命令终端窗口集合);
  • 第三,通过插件保存工作环境,方便跟踪工作进度。

tmux基本概念(一张图秒懂):

注意区别这里面的窗口跟terminal自己的窗口。terminal自己的窗口指的是你使用tmux的窗口,而这里的窗口是指每个tmux下建立的工作环境

image

  • 第一,开启和关闭tmux
1
2
3
4
5
# 开启
tmux

# 关闭并退出tmux(如果需要)
tmux kill-server

tmux操作会话常用的按键组合为ctrl+b +s为列出全部的会话,可以使用↑↓←→ + Enter键选择;除此以外的常用命令包括:

1
2
3
4
5
6
7
8
9
10
11
12
# 列出当前全部已建会话
tmux ls
# 新建一个会话
tmux new -s <session_name>
# 绑定当前terminal窗口到某个tmux会话(尚未进入任何tmux会话)
tmux a -t <session_name>
# 重命名某个对话
tmux rename-session -t <old_name> <new_name>
# 退出当前会话
tmux detach
# 结束某个会话(慎用)
tmux kill-session -t <session_name>

tmux操作窗口常用的按键组合为ctrl+b + nctrl+b + p向前或者向后选择窗口,ctrl+d关闭当前窗口以及ctrl+b + w选择窗口;除此以外的常用命令包括:

1
2
3
4
5
6
# 新建一个窗口
tmux new-window -n <window_name>
# 列出当前会话下的全部窗口
tmux list-windows
# 重命名当前窗口
tmux rename-window <new_name>

使用pane,好嗨哟

以上都是比较常规的操作,学会了基本上能玩的很嗨了。如果还想更快乐,就需要学习一下pane的概念,但也不是太复杂,熟悉vim的朋友也很容易上手。

简单来说,pane就是把当前的一个tmux窗口进一步划分成若干块;好处就是可以配合命令观察,比如左边issue一个commend,左边pane时刻使用htop观察资源情况,右边跑任务啥的:

image-2

那么,常用的pane的命令除了使用ctrl+b + ↑↓←→来回横跳,还有使用ctrl+b + %以及ctrl+b +"或纵或横隔开窗口等。

以上快捷键也可以用命令代替,可以根据个人喜好选择合适自己的玩法

我的tmux配置

正如大家所猜想的那样,tmux也有属于自己的配置文件,就在~/.tmux.conf里。下面分享一下我自己的配置,请盆友们按需自取:

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
## ~/.tmux.conf

# Change the prefix key to C-a
# set -g prefix C-a
# unbind C-b
# bind C-a send-prefix

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# kye bindings
# Use Alt-arrow keys to switch panes
# bind -n C-h select-pane -L
# bind -n C-l select-pane -R
# bind -n C-k select-pane -U
# bind -n C-j select-pane -D

# restore sessions at crush
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# restore vim/neovim session
set -g @resurrect-stragegy-vim 'session'
set -g @resurrect-stragegy-nvim 'session'
# 这个是自动回复 如果不设置需要用lead+ctrl s 保存以及lead+ctrl r恢复
set -g @continuum-restore 'on'
set -g @resurrect-capture-pane-contents 'on'

# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'git@github.com:user/plugin'
# set -g @plugin 'git@bitbucket.com:user/plugin'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

脑子不好用记不住怎么办

嗯,好问题,我也一样。啥命令一学就忘,不然你以为我为啥写这篇blog…

一个傻瓜式解决方案就是编写一个专属于自己的命令提示函数,忘了的时候随时召唤,刷新一下记忆,如下:

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
## ~/.bashrc or ~/.zshrc

# tmux alias
alias tnew='tmux new -s'
alias tls='tmux ls'
alias td='tmux detach'
alias ta='tmux a -t'
alias tk='tmux kill-session -t'
alias ts='tmux switch -t'

#tmux self defined help info
th() {
echo "# Tmux 基本操作"
echo "## 基本操作1: 新建pane|window|session:"
echo " 新建session:\ttmux new -s session_name"
echo " 新建window:\tctr+b + c"
echo " 新建pane:\tctr+b + %, ctr+b + \""
echo " ------------------------------------------------"
echo "## 基本操作2: pane之间|window之间|session之间 切换"
echo " pane之间的切换:\tctr+b + 方向键(或者根据喜好配置一下类似于vim的hjkl键)"
echo " window之间的切换:\tctr+b+n(ext), ctr+b+p(revious) (补充:ctr+b+w)"
echo " session之间的切换:\tctr+b+s (补充:ctr+b+d, tmux attach -t )"
echo " ------------------------------------------------"
echo "## 基本操作3: 关闭tmux服务及其他常用命令"
echo ' detach a session:\tctr+b + d 或输入\"exit"'
echo ' quit tmux:\t\ttmux kill-server'
echo ' rename a session:\ttmux rename-session -t <old-session-name> <new-session-name>'
}

参考链接

1. https://www.ruanyifeng.com/blog/2019/10/tmux.html

2. http://louiszhai.github.io/2017/09/30/tmux/

ㄟ(●′ω`●)ㄏ
0%