作者:赤乐君
链接:https://www.jianshu.com/p/fd3bbdba9dc9
来源:简书
https://www.cnblogs.com/piperck/p/4992159.html
这个教程的目的是为了更好地使用tmux,作为一个小白,看了网上众多的资料后,感觉资料太多,质量也良莠不齐。在youtube上找了一个很好地系列教程,实际跟着做了一遍后tmux最有用的部分都学会了。有什么不懂得直接查查速查表即可。
本次教程的环境是MAC OS 10.11. 关于如何安装tmux可以参考这两篇文章。
http://www.pianshen.com/article/5034333199/ 了解session,window,pane的区别
这两篇是我个人觉得比较好的文章,可以看完这两篇文章后再来看我的教程。做一个梳理和总结。
这个教程是我跟着视频做完的笔记,视频里有些内容因为时间问题不能用,我也做了相应的改进。建议最好还是把视频跟一遍,然后拿我的笔记用做复习。
本教程参考的视频:https://www.youtube.com/watch?v=FEfuXRTqINg
快捷键速查表:https://tmuxcheatsheet.com
为什么使用tmux?
因为如果我们用terminal连接remote server。发生一些不可抗力,terminal关了的话,your work is GONE!
但是tmux不一样,即使你关闭了tmux。下次重新attch的时候,你会发现之前的东西都还在。这是因为即使你关闭了tmux,它也还在服务器的后台运行。
举个栗子:
prefix + % :水平分割pane
上面这句话里的+
号和:
号可以无视。:
号之后的内容是我写的注释。
prefix是顺序按下ctrl和b, 然后再按%
键,这个%
键就是shift+5。shif和5是同时按下。
分割pane
退出
放大一个pane
在pane之间switch
resize the pane
创建window
在不同的window间移动
关闭window
重命名window:因为创建新的window后,下面除了数字编号不同外window名称都是一样的。所以为了知道每一个window是什么,最好重命名一下。
如果没有配置文件的话先创建: touch ~/.tmux.conf
视频中的文件配置
# Send prefix
set-option -g prefix C-a
unbind-key C-a
bind-key C-a send-prefix
# Use Alt-arrow keys to switch panes
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# Shift arrow to switch windows
bind -n S-Left previous-window
bind -n S-Right next-window
# Mouse mode
set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on
# Set easier window split keys
bind-key v split-window -h
bind-key h split-window -v
# Easy config reload
bind-key r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"
首先,在更改了.tmux.conf后,在tmux里的快捷键没有变化。查找后发现是tmux只有在新建session的时候,才会去找tmux.conf文件。所以说,我之前创建的那些session都没有参考tmux.conf. 所以我就用tmux ls tmux kill-session -a
只保留当前session。再删除当前session tmux kill-session -t py27
。这下删除了所有创建好的session。
然后再次用tmux new -s py27
创建一个新的名为py27
的session。有提示了,但是错误提示显示没有mode-mouse命令。google之发现在2.1之后的tmux版本里,已经废除了这个命令。想要开启mouse mode的话,只需要一个句命令即可set -g mouse on
。
注意:乌班图14下默认安装时1.8版本,所以还是上面的配置。确认好自己的版本之后再确认配置文件。
更新后如下
# Send prefix
set-option -g prefix C-a
unbind-key C-a
bind-key C-a send-prefix
# Use Alt-arrow keys to switch panes
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# Shift arrow to switch windows
bind -n S-Left previous-window
bind -n S-Right next-window
# Mouse mode
set -g mouse on
# Set easier window split keys
bind-key v split-window -h
bind-key h split-window -v
# Easy config reload
bind-key r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded
Send prefix
把prefix的ctrl+b变为了ctrl+a,因为这样按起来方便些。基本上用tmux的都改了这个。
Use Alt-arrow keys to switch panes
不用按prefix,直接用alt+箭头在pane之间switch。实际用过之后才发现真是太方便了!
Shift arrow to switch windows
不用按prefix,直接用shift+箭头在window之间switch。太方便了!
Mouse mode
开启鼠标模式。用鼠标就能切换window,pane,还能调整pane的大小,方便!
Set easier window split keys
这一部分是用来更方便切分pane的。prefix + v 代表竖着切,prefix + h 代表横着切。比起默认的切割方法不仅直观而且方便。
Easy config reload
下一次如果修改了.tmux.conf的设置的话,不用关掉tmux。直接用prefix+r,就能重新加载设置。
查看所有的session
重新连接某一个session with name(在terminal输入)
注意:不能再tmux状态下,会报错。。或者Prefix+d (d for detach),暂时离开Tmux,回到终端环境。重连就输入tmux a -t 就行。不过这种方式对于切换session比较麻烦。
偷懒连接上一个session(在terminal输入)
更名session(tmux状态下输入)
创建session的时候直接命名(在terminal输入)
断开一个session(detached) (tmux状态下输入)
删除session(在terminal输入)
要真正关闭一个session,可以在终端下执行命令
Tmux的很多默认配置不够友好,需要个人重新定义。
unbind C-b
set -g prefix C-a
bind C-a send-prefix
bind r source-file ~/.tmux.conf \; display "tmux.conf reload!"
bind | split-window -h
bind - split-window -v
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
set -g base-index 1
set -g pane-base-index 1
第1-2行表示重新定义Prefix,把默认的 Ctrl+b 换成 Ctrl+a ,便于单手操作。
第4行重新定义 Ctrl+a 组合键,当 Prefix + Ctrl+a 按下后,等同于原先 Ctrl+a 功能,解决Ctrl+a被设置为Prefix后已有快捷键失效的问题,也就是说只要按下两次 Ctrl+a ,就能实现原先终端下回到行首的功能。
第6行定义新的快捷键 Prefix+r ,重新加载Tmux配置文件,避免每次要进入命令模式reload配置。
第8-9行重新定义分屏快捷键。使用 Prefix+| 代替 Prefix+% 实现垂直分屏,使用 Prefix+- 代替 Prefix+" 实现水平分屏。|和-的符号本身就可以表示分屏线形状,非常直观。
第11-14行重新定义上下左右方向键,遵循vi习惯。定义以后,任何需要上下左右方向键的场景都可以用hjkl替代。
第16行表示将window的起始下标设为1。因为标准键盘的0在9后面, Prefix + 0/1/2 ...切换不便。
第17行表示将pane的起始下标设为1。理由同上。
二. 鼠标支持
set-window-option -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on
第1行表示启用鼠标。虽然Tmux推荐用键盘完成所有操作,但是对现代开发人员来说,纯键盘操作的习惯并非那么容易养成,因此启用鼠标配置成为标配。
第2行表示支持鼠标选择pane。
第3行表示支持鼠标调整pane大小,选择线条拖动就行
第4行表示支持鼠标选择window,点击选项卡就行
三. UI样式调整
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
set -g status-justify left
setw -g monitor-activity on
第1-3行表示状态栏中window标签的高亮样式,默认是绿底黑字,设置后当前window红底白字显示。
第5行表示状态栏中window列表左对齐排列。
第7行表示非当前window有内容更新时显示在状态栏。
四. 复制粘贴
默认情况下,按 Prefix+[ 进入复制模式,按回车(Enter)退出复制模式。可以通过配置在复制模式中使用vi习惯操作:
setw -g mode-keys vi
在复制模式下,按空格键(Space)开始复制,按回车(Enter)完成复制,并退出模式,按 Prefix+] 粘贴。这些快捷键也可以通过以下配置进行修改,使操作更加靠近vi。
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
第1-2行表示重新绑定Escape键, Prefix+Escape 为进入复制模式。
第3-4行表示重新绑定p键, Prefix+p 为粘贴。
第5行表示重新绑定v键, Prefix+v 为开始复制。
第6行表示重新绑定y键, Prefix+y 为完成复制。
要查看当前复制的内容,可以在 Prefix+: 后出现的命令行中输入 show-buffer ,输入 list-buffers 可以列出所有的复制历史内容。
关于复制粘贴,更深入的话题是Tmux和系统剪贴板之间的交互,Linux可以使用xclip,Mac可以使用tmux-MacOSX-pasteboard,不过我没有试验成功,暂时可以通过ALT + 鼠标复制内容到系统剪贴板。
作者:赤乐君
链接:https://www.jianshu.com/p/fd3bbdba9dc9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。