tmux是一个非常好用的终端分屏工具。个人总结其优点如下:
强烈推荐学习并使用tmux ,只需要30分钟左右就可以上手了; 对于经常泡在终端下的码农来说,此工具几乎每天必用,可以大大提高工作效率。
tmux安装
Mac用户直接brew安装即可。其它系统也可用sudo apt-get install tmux
或类似命令。
记得用tmux -V
确认一下版本 >= 1.9;低于这个版本的话,一键全屏用不了,也不支持插件管理工具TPM。
brew install tmux
tmux -V
# tmux 2.0
tmux基础用法
安装好tmux之后,在shell中直接敲tmux
即可启动一个tmux会话。
此时,我们就已经进入了tmux环境。
敲<ctrl+b> %
可以把屏幕纵向切分成两列,
敲<ctrl+b> "
可以把屏幕横向切分成两行。
这里的<ctrl+b>
就是tmux中的前缀键了。通过这个前缀键,tmux就知道后面跟的那个字符是作为tmux命令传递的,
而不是直接传递给tmux会话里面的shell或任何程序。
前缀键可以通过~/.tmux.conf
来修改,但是个人不建议改。
如果觉得<ctrl>+b
跟vim里的“后翻页”冲突了,
可以在vim中使用<ctrl>+u
“后翻半页”来凑合着用;不到万不得已,不要更改tmux的默认前缀键。
关于更多的命令用法,请参考这篇,
请忽略该文中关于 更改前缀键和.tmux.conf
的部分。
.tmux.conf
,可以类比为.vimrc
;用来控制tmux的行为。
我先提供以下内容作为~/.tmux.conf
的最基本配置。如果不折腾,完全够用了;
关于 utf8支持/状态栏之类的设置,可以通过tmux-sensible
插件来引入(后文有说明)。
set-window-option -g mode-keys vi # 复制模式(我更习惯称为“选择模式”)中的默认键盘布局模仿vi
set-window-option -g aggressive-resize on # 开启尽可能大的屏幕,除非另一个client也正在查看
# 此外,用 `tmux detach -a`也可以;踢掉除当前以外的所有session
bind h select-pane -L # h 等于向左移动光标
bind j select-pane -D # j 向下移动光标
bind k select-pane -U # k 向上移动光标
bind l select-pane -R # l 向右移动光标
如果有兴趣,还可以在~/.zshrc
中添加以下内容;使得进入shell时,自动 挂载/启动 到tmux。
# 判断是否已有开启的tmux会话,没有则开启
if which tmux 2>&1 >/dev/null; then
test -z "$TMUX" && (tmux attach || tmux) #这里原文写的是tmux_init,不好使
fi
本文始终只考虑单用户的情况; 如果一台服务器上有多人分别开启tmux会话,情况会变得复杂, 上述脚本可能会attach到别人的tmux会话上。
TPM(Tmux Plugin Manager)安装
TPM是一个很好用的Tmux插件管理器,概念上类似于管理vim插件的Vundle
或者Pathogen
。
参考TPM主页,安装步骤如下:
-
把TPM项目clone下来
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
-
将以下内容追加到
~/.tmux.conf
底部:# List of plugins set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tmux-sensible' # 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'
-
重载tmux配置文件,生效。
$ tmux source ~/.tmux.conf
基于TPM的Tmux插件管理
vi ~/.tmux.conf
,看注释就很清楚了。
这里先熟悉一下步骤,后文会推荐几个好用的插件:
- 改类似
set -g @plugin '...'
这样的行,添加你想要的插件 - 在终端中敲
tmux
启动tmux -
在tmux环境中敲
<prefix>+I
来安装相应的插件(ls ~/.tmux/plugins/
可以看到抓下来的插件)<prefix>
就是tmux中前缀键- 注意
I
是大写
- 如果要升级所有插件,敲
<prefix> + U
- 如果要干掉某个插件,先从
~/.tmux.conf
中删掉对应的行,然后敲<prefix> + alt + u
即可
tmux插件的使用
重点介绍以下几款插件
tmux-plugins/tmux-resurrect
功能:保存tmux会话状态(包括面板布局,据说甚至支持恢复vim会话);重启机器仍可恢复
配置:vi ~/.tmux.conf
,添加以下几行
set -g @plugin 'tmux-plugins/tmux-resurrect' #安装tmux-resurrect
set -g @resurrect-capture-pane-contents 'on' #恢复面板内容
set -g @resurrect-strategy-vim 'session' #恢复vim会话状态
说明: 其中,恢复vim会话状态那个功能基于一个叫vim-obsession的vim插件,试过貌似不好使。 其它的样式恢复得还不错。 另外还有个实验性的功能恢复bash历史, 爱折腾的可以试试;我用得不多。 还有个与此功能类似的tmux插件,叫tmux-continuum,也可以看看。
用法:
<prefix> + <ctrl-s>
:保存tmux状态<prefix> + <ctrl-r>
:恢复tmux状态
tmux-plugins/tmux-open
功能:打开/编辑 在tmux中选中的 文件/URL
配置:vi ~/.tmux.conf
,添加以下几行
set -g @plugin 'tmux-plugins/tmux-open' #安装tmux-open
set -g @open 'x' #用'x'代替默认的'o' (tmux开启了类似vim的选择模式下,o是跳到选区的另一头)
set -g @open-editor 'C-x' #用'<ctrl>-x'代替默认的'<ctrl-o>'
用法:
- 在tmux下敲
<prefix> + [
进入tmux的选择模式(类似于vim的v模式),高亮选择一段URL或者本地文件地址 - 敲
x
可以对这段高亮内容执行open
;敲<ctrl+x>
可以对其执行$EDITOR
(所以,要先export EDITOR=vim
;我用得少,没设)
tmux-plugins/tmux-yank
功能:将tmux选择的内容拷贝到系统剪切板
配置:
- 如果你的Mac系统>=OSX 10.10(Yosemite),可以使用内置的
pbcopy
,跳过这一步。 否则,请执行brew install reattach-to-user-namespace
-
vi ~/.tmux.conf
,添加以下几行set -g @plugin 'tmux-plugins/tmux-yank' #安装tmux-yank set -g @shell_mode 'vi' #兼容shell的vi模式
说明:
shell可以使用vi模式以方便编辑,bash
中的配置见此。
oh-my-zsh
中自带vi-mode
插件,只需编辑~/.zshrc
,在plugins一行,加入vi-mode
即可。
vi-mode
的用法见此
plugins=(git brew osx pip vi-mode)
插件的用法如下:
普通模式下:
<prefix> + y
:把当前命令行的内容拷到剪切板(支持bash
,zsh
,python
解释器;稍加配置还支持vim
命令栏)<prefix> + Y
:把当前面板的路径拷到剪切板
选择模式下:
y
:把当前选中的内容拷到剪切板Y
:把当前选中的内容拷到剪切板,然后再粘到命令行(退出tmux选择模式后会看到zsh
提示符后已经粘好内容了,直接敲回车就可以执行)