Tmux使用

Tmux是一个终端复用软件,它设计的更为简单和现代,欲取代GNU的Screen。Tmux可以让你在一个终端里新开多个窗口(类似XShell中的多标签),并且每个窗口还可以继续切分为更小的pane。在远程登录中,Tmux会保存你的工作环境,不会因为连接断开而命令停止执行,类似于nohup功能。当你重新进入原来的Tmux的session后,不光之前执行的命令还在继续,原来打开的各种窗口、工作目录等都能恢复。

那么到底使用Tmux能够带来哪些好处了,就个人而言,我以前的工作方式是:

  1. 打开XShell软件,SSH远程登录
  2. 打开vim或者进入某个工作目录执行命令
  3. 复制一个新的SSH窗口
  4. 重复第二步,直到我所有需要的工作环境都恢复
  5. 开始工作
  6. 为了执行代码或者查看运行日志,切出vim或者切换到新的SSH窗口查看

现在的工作方式是:

  1. 打开XShell,SSH远程登录
  2. 执行Tmux命令恢复session,所有上次工作环境就恢复了
  3. 开始工作
  4. 窗口多pane,命令和日志可以直接在当前窗口执行和查看

安装

在tmux主页下载最新版的源代码包(tmux2.1 libevent2.0),tar zxvf tmux_package解压后,参考目录里的README安装。

make verify验证libevent的安装时,可能会出现下面错误。感觉应该某个域名被gfw封了导致的,没有vpn测试。在忽略这个错误继续安装后,目前都能正常使用。

FAIL regress_dns.c:156: assert(dns_ok == DNS_IPv4_A): 0 vs 1dns/gethostbyname

make编译tmux的过程中可能会出现缺少curses-dev库的错误,类debian系统中使用如下命令安装,其他系统请参考这里

sudo apt-get install libncurses5-dev

如果你是直接使用系统自带的包管理器安装的tmux,请确认下tmux的版本tmux -V。tmux 1.x的版本在lessman等命令中搜索时,查找到的字符串不会高亮,导致看起来很不方便。因此建议手动安装最新版本。

配置

tmux的配置可以存在于/etc/tmux.conf~/.tmux.conf文件中,前者是全局的配置,后者是关于特定用户的。

Tmux支持插件扩展,TPM是Tmux的插件管理器
插件安装

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

个性配置

# list of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'seebi/tmux-colors-solarized'
# set -g @plugin 'arcticicestudio/nord-tmux'

# plugins configuration
# set -g @nord_tmux_no_patched_font "1"
set -g @colors-solarized 'dark'

# 支持256 color
# set -g default-terminal "screen-256color"
set -g terminal-overrides ',xterm-256color:Tc'

# increase scrollback buffer size
set -g history-limit 50000

# tmux messages are displayed for 4 seconds
set -g display-time 4000

# refresh 'status-left' and 'status-right' more often
set -g status-interval 5

# super useful when using "grouped sessions" and multi-monitor setup
setw -g aggressive-resize on

set-window-option -g mode-keys vi

bind k selectp -U # 选择上窗格
bind j selectp -D # 选择下窗格
bind h selectp -L # 选择左窗格
bind l selectp -R # 选择右窗格
bind-key R source-file ~/.tmux.conf \; \
display-message "source-file done"

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

修改完配置后,想让当前tmux的session生效,进入Command模式(如何进入参考后面的使用),执行下面命令

source-file ~/.tmux.conf

如果在配置了256色后,发现在tmux中运行的程序(如vim)依然没有256色,那么使用tmux -2命令启动,强制使用256色。
如果系统是gbk编码,但是SSH终端却使用utf-8编码连接,那么在启动时需要添加-u选项,强制使用utf-8,不然会出现乱码、花屏。
建议.bash_aliases中添加`alias tmux=’tmux -2 -u’

默认安装tmux后,在使用tmux命令的过程中不能tab补全,需要安装补全脚本。下载补全脚本,放在/etc/bash_completion.d/目录下,然后执行source /etc/bash_completion.d/tmux

如果按Tab键后,出现如下错误,请先创建一个tmux server就好了(就是直接运行命令tmux)。

no server running on /tmp/tmux-1000/default

使用

tmux分为几个模式:普通模式、Command模式、复制模式、粘贴模式。

普通模式就是直接使用终端。

Command模式下可以通过各种绑定的按键来操作tmux,如创建新窗口、新建pane、输入命令等,类似vim的command模式。默认进入Command模式的按键为Ctrl+b。进入Command模式后,输入:后,可以在状态栏输入命令。

复制模式下可以进行复制,进入方式为Ctrl+b->[,粘贴模式进入方式为Ctrl+b->]

session操作

创建一个默认的session,并进入tmux

tmux

新建session,并进入

tmux new-session -s session_name

暂时离开session: Ctrl+b->d

恢复原来的session

tmux attach-session -t session_name

列出已有的session

tmux list-session

关闭session: Ctrl+b -> : -> kill-session。 或者

tmux kill-session -t session_name

窗口操作

新建一个窗口: Ctrl+b -> c
关闭一个窗口: Ctrl+b -> &
窗口命名: Ctrl+b -> ,
调整窗口index: Ctrl+b -> .
选择0-9窗口: Ctrl+b -> 0-9
选择前/后窗口: Ctrl+b -> p/n

pane操作

垂直分割一个pane: Ctrl+b -> %
水平分割一个pane: Ctrl+b -> "
关闭pane: Ctrl+b -> x
选择下一个pane: Ctrl+b -> o
调整pane大小: Ctrl+b -> Ctrl+Up,Ctrl+Down,Ctrl+Left,Ctrl+Right
最大化/还原pane: Ctrl+b -> z

最后,详细的使用还是参考man tmux

Ctrl+b -> z 表示先按Ctrl+b键,然后再按z