tmux

来源:互联网 发布:淘宝扣除保证金的规则 编辑:程序博客网 时间:2024/05/21 16:57

什么是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-256colorendif


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 clipboardbind-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 selectionbind-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-modeunbind pbind p pasteb

有的可能用上面的脚本中的bind Escape copy-mode不好用,看有的文章上说需要先unbind [,所以如果上面脚本不好用的话,可以试试下面的脚本:

unbind [bind Escape copy-modeunbind pbind 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来激活该panesetw -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 lineset -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-256colorset -g default-terminal "tmux-256color"# No bells at allset -g bell-action none# Keep windows around after they exitset -g remain-on-exit on# Change the prefix key to C-aset -g prefix C-aunbind C-bbind 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 windowsbind F1 selectw -t:10bind F2 selectw -t:11bind F3 selectw -t:12bind F4 selectw -t:13bind F5 selectw -t:14bind F6 selectw -t:15bind F7 selectw -t:16bind F8 selectw -t:17bind F9 selectw -t:18bind F10 selectw -t:19bind F11 selectw -t:20bind F12 selectw -t:21# Keys to toggle monitoring activity in a window, and synchronize-panesbind m set monitor-activitybind 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 modesetw -g mode-keys viunbind [# 设置 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 clipboardbind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancelunbind pbind p pasteb# 将复制下来的文本发送到系统的剪贴板中# invoke reattach-to-user-namespace every time a new window/pane opensset-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来激活该panesetw -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!"
原创粉丝点击