什么是Tmux
当你在公司使用SSH连接到公司的机器上,使用Iterm2打开很多窗体。当你回家后,准备工作时,还需要再那打那么多窗体。如果你感觉到烦的话,请使用它。
如何学习文章
Tmux 简介与使用:总结的很好
如何使用Tmux提高终端环境下的效率:特别基础,内容不多,多图。
tmux使用及个性化配置
Tmux 速成教程:技巧和调整:非常实用的文章
优雅地使用命令行:Tmux 终端复用
如何使用一条命令连接到服务器,并打开tmux
程序员高效技巧系列 – 完全脱离鼠标的终端:一些进阶的技巧,这个文章下面的参考文章也是一些进阶的文章
遇到的问题
本人使用的是2.5
版本。因为有一些文章都是基于老版本的配置,在实践时遇到的一些问题,记录下要来:
1,一开始我看到tmux,看有的文章介绍,以为它可以防止ssh连接断开。但我误解了,它不能防止ssh连接断开,它可以保留ssh断开前,打开的window或pane。
tmux是保持“实际被操作的机器的window和pane”,不是你正使用的机器。比如:
你正使用你的Mac,SSH连接到公司的机器上工作。如果你要保持你打开的window和Pane,就要在公司的机器上安装tmux,而不是你的Mac上。
2,很多文章说编辑~
目录下的.tmux.conf
,但这个文件是没有的,是需要自己手动创建的。你可以从tmux
目录的share/tmux
目录下,复制example_tmux.conf
文件出来,改名为.tmux.conf
。(注意,不要忘了文件前面那个点)
3,在修改完配置文件后,可以要session中,使用下面的方法来刷新session配置:
- 按prefix键(默认为:ctrl + b )
- 按“:”键
- 输入”source-file ~/.tmux.conf”
但注意一点,在输入完这个命令后在下面的状态栏可以看到:多了4个window。不知道怎么回事,没时间去细看了,大家注意一下。
多出4个原因找到了,是因为把tmux自带的tmux.conf拿出来用时,它自带了下面的设置:
4,VIM颜色显示不对问题
- 1,在Shell里设置以下变量(我是放到了
.bashrc
文件里了):
export TERM=xterm-256color
- 2,在
.vimrc
文件里添加下面的脚本:
if exists('$TMUX')
set term=screen-256color
endif
5,很多例子中说,你还可以设置 Tmux 使用 v 键选择文本,用 y 键复制文本。为此只需要将下面的配置项加入到配置文件 ~/.tmux.conf 中。
# start selecting text typing 'v' key (once you are in copy mode)
bind-key -t vi-copy v begin-selection
# copy selected text to the system's clipboard
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy
但上面是之前版本的写法,2.5版本的话使用下面的方法:
# Bind `v` to trigger selection
bind-key -T copy-mode-vi v send-keys -X begin-selection
# Bind `y` to yank current selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
6,在Tmux中,想复制屏幕上的内容的话,需要按下面的步骤去做:
- 按prefix键(默认是 ctrl + b )
- 按“[”键,然后用光标键移动到要复制的位置
- 按空格键进行选择要复制的范围,再按回车键进行复制
- 按prefix键(默认是 ctrl + b )后,再按“]”键进行粘贴
有的人喜欢使用VIM的模式,就是用“ESC”键代替“[”键,用“p”键代替“]”键,想这么做的话,可以使用下面的方法:
bind Escape copy-mode
unbind p
bind p pasteb
有的可能用上面的脚本中的bind Escape copy-mode
不好用,看有的文章上说需要先unbind [
,所以如果上面脚本不好用的话,可以试试下面的脚本:
unbind [
bind Escape copy-mode
unbind p
bind p pasteb
如果想看每个键和哪个事件绑定的话,可以使用下面的命令:
tmux list-keys
8,想启动Tmux就打开并列窗口的话,请参考下面的文章:
Linux下终端利器tmux
9,设置通过鼠标能上下滚动,调整容器大小的设置也变了。参考文章:tmux set -g mouse-mode on doesn’t work
旧设置:
setw -g mouse-resize-pane on # 开启用鼠标拖动调节pane的大小(拖动位置是pane之间的分隔线)
setw -g mouse-select-pane on # 开启用鼠标点击pane来激活该pane
setw -g mouse-select-window on # 开启用鼠标点击来切换活动window(点击位置是状态栏的窗口名称)
setw -g mode-mouse on # 开启window/pane里面的鼠标支持(也即可以用鼠标滚轮回滚显示窗口内容,此时还可以用鼠标选取文本)
新设置
set -g mouse on
奇怪,Mac 10.11 好像也是 tmux2.5,旧设置也好用
10,如何用鼠标进行复制
在设置完set -g mouse on
后,,使用option + 鼠标左键
就可以进行复制了。(个人使用的是Iterm2)
插件
Tmuxinator (为项目自动创建会话)
假设你正在开发应用程序 A。在开发过程中,经常要创建 Tmux 会话,会话中包含“server”、“editor”(用于编写代码)和“shell”(用于运行系统命令)这 3 个窗口。不仅如此,在一天之中的某个特定的时间你还需要临时进入到应用程序 B 的开发工作中。于是你又不得不创建另一个会话,虽然有略微的不同(比如目录和某些命令),但是会话中还是要包含应用程序 A 中的那 3 个窗口。但是有了 Tmuxinator,你就可以为每个Tmux 会话声明一个配置,然后用 1 条命令就能创建出这个会话了。这功能太棒了,不是吗。
Tmux Resurrect:
Tmux Resurrect 能够备份Tmux会话的各种细节,包括所有会话、窗口、窗格以及它们的顺序,每个窗格的当前工作目录,精确的窗格布局,活动及替代的会话和窗口,窗口聚焦,活动窗格,窗格中运行的程序等等,非常贴心。
Tmux Continuum(推荐)
Tmux Resurrect 工作很好,只是备份和还原都是手动完成。而 Tmux Continuum 更进一步,它将 Tmux 会话的保存及还原自动化,定时备份,然后在 Tmux 启动时还原。
同类软件
GNU Screen、dvtm、splitvt、byobu
自己的脚本
# Example .tmux.conf
#
# By Nicholas Marriott. Public domain.
#
# Some tweaks to the status line
set -g status-right "%H:%M"
set -g window-status-current-attr "underscore"
# If running inside tmux ($TMUX is set), then change the status line to red
%if #{TMUX}
set -g status-bg red
%endif
# Enable RGB colour if running in xterm(1)
#set-option -sa terminal-overrides ",xterm*:Tc"
# Change the default $TERM to tmux-256color
set -g default-terminal "tmux-256color"
# No bells at all
set -g bell-action none
# Keep windows around after they exit
set -g remain-on-exit on
# Change the prefix key to C-a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# Turn the mouse on, but without copy mode dragging
#set -g mouse on
#unbind -n MouseDrag1Pane
#unbind -Tcopy-mode MouseDrag1Pane
# Some extra key bindings to select higher numbered windows
bind F1 selectw -t:10
bind F2 selectw -t:11
bind F3 selectw -t:12
bind F4 selectw -t:13
bind F5 selectw -t:14
bind F6 selectw -t:15
bind F7 selectw -t:16
bind F8 selectw -t:17
bind F9 selectw -t:18
bind F10 selectw -t:19
bind F11 selectw -t:20
bind F12 selectw -t:21
# Keys to toggle monitoring activity in a window, and synchronize-panes
bind m set monitor-activity
bind y set synchronize-panes\; display 'synchronize-panes #{?synchronize-panes,on,off}'
# Create a single default session, because a session is created here, tmux
# should be started with "tmux attach" rather than "tmux new"
#new -d -s0 -nirssi 'exec irssi'
#set -t0:0 monitor-activity on
#set -t0:0 aggressive-resize on
#neww -d -ntodo 'exec emacs ~/TODO'
#setw -t0:1 aggressive-resize on
#neww -d -nmutt 'exec mutt'
#setw -t0:2 aggressive-resize on
#neww -d
#neww -d
#neww -d
# customize -------------------------
# 在按下prefix后,进入VI模式,可以使用hjkl进行移动,然后选择复制等
# Use vim keybindings in copy mode
setw -g mode-keys vi
unbind [
# 设置 Tmux 使用 v 键选择文本,用 y 键复制文本
bind Escape copy-mode
# start selecting text typing 'v' key (once you are in copy mode)
bind-key -T copy-mode-vi v send-keys -X begin-selection
# copy selected text to the system's clipboard
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
unbind p
bind p pasteb
# 将复制下来的文本发送到系统的剪贴板中
# invoke reattach-to-user-namespace every time a new window/pane opens
set-option -g default-command "reattach-to-user-namespace -l bash"
# 用鼠标切换窗口/调节分屏大小
setw -g mouse-resize-pane on # 开启用鼠标拖动调节pane的大小(拖动位置是pane之间的分隔线)
setw -g mouse-select-pane on # 开启用鼠标点击pane来激活该pane
setw -g mouse-select-window on # 开启用鼠标点击来切换活动window(点击位置是状态栏的窗口名称)
setw -g mode-mouse on # 开启window/pane里面的鼠标支持(也即可以用鼠标滚轮回滚显示窗口内容,此时还可以用鼠标选取文本)
#消息栏字体使用UTF-8编码
set -g status-utf8 on
# 将Ctrl + r 设置为加载配置文件,并显示”Refleshed configure!”信息
bind C-r source-file ~/.tmux.conf \; display "Refleshed Configure!"