Iterm2的使用者在使用过程中不断的切换工作内容,不可避免的会保持打开众多的标签或窗口,就像chrome不知不觉就是一大堆的标签一样。我们可以使用神器tumx来把工作环境分类,比如分成:github, work, blog。 好处是不同环境间布局不会相互影响且原环境切换到后台后,再切换回来,还是原状态。
tmux是把多个虚拟窗口看成一个物理窗口(terminal multiplexer),通过tmux的命令来操作这些窗口集合,方便切换且不会打乱你原来的工作环境,有点类似于Screen - GNU,两者强大之处在于能把整个窗口都切换到后台运行,需要的时候再切换回来, 但是tmux的可操控性更好。tmux
- 在screen中,每个instance有自己完整独立的进程,而tmux则只在第一次运行时,会启动一个server进程,接下再启动instance则会去连接已有的server,这就意味着,可以多个instance共享同一个session,大家看到的都是一样的,绝佳的结对编程场景。tmate • Instant terminal sharing这个就是基于tmux用于共享terminal的开源项目。
- screen只支持窗口(windows)模式,tmux支持多panes模式(与item2一致),一个window里面可以分割为多个panes(见上图)。
但是对于我这种不需要在编辑器(vim)使用tumx的人来说,tmux的缺点也很显示:
- 要学习一整套tmux的快捷键和命令,man tmux可以看到使用手册大约有50页,复杂到甚至有人把它的使用看成一种哲学The Tao of tmux。
- Ctrl+B与Emacs中的回退光标冲突了, 要时刻记住自己是在正常的终端还是在tmux中。
- 不能随意的使用滚轮上下滚动。
- 不能像iterm2那样方便的拖动窗口调整布局。
Iterm2整合tmux后就彻底的解决了以上缺点,并保留了tmux的所有优点。核心思路就是把tmux中的各种命令操作映射到iterm2原有的操作上,真正做到在iterm2中操作tmux和原有操作并无区别,把学习成本降低为零。
最佳实践
当你决定使用tmux时,最好一直都使用tmux来管理环境。为每一种环境设置不同的session, 比如:github,work,test,方便切换。
iTerm2中tmux基本设置
-
在login shell中send text as start:
tmux ls && read session && tmux -CC attach -t ${session:-default} \ || tmux -CC new -s ${session:-default}
- 在General选项中设置成以下,效果是每次打开使用tmux -CC新建session时都会使用一个新的窗口,并把tmux client session的命令隐藏到后台。
tmux_new_windows
- 为了区别与其它的终端,我还在colors中也选择了的color Presets中也选择了Tango Dark。
整体效果如下:iterm2_tmux_example
是不是感觉和iterm2内置的窗口没有区别!这就是它最棒的地方,如果你点了左上角的小红点关闭窗口,并不是真正的关闭,只是把此session切到后台进行,你可以随时通过命令把它(attatch)切回来。
命令详解
如果你完全按照上面的设置后,以后的绝大部分操作都不需要手动输入tmux命令,因为iterm2已把tmux中大部分操作命令都映射到了自己身上,比如:
- 关闭标签,窗口,会话映射为结束tmux 标签,窗口,会话。
- Command + D,Command + shift + D分拆pane。
- 拖拉窗口调整pane布局。
通过这些映射,你完全不需要输入任何的tmux命令,就能流畅地使用tmux。
如果觉得打开新标签页的方式来创建session的不太灵活,你还可以使用命令操作。以下就是2个核心命令:
tmux -CC -t session-name用新窗口新建一个session;
tmux -CC attach -t session-name转入到指定的session中;
总之,绝大部分情况下,你都不需要记住并输入这些命令。
其它你可能期待的设置
iterm2_better_setting
让选中的pane跟随鼠标,切换时少点击一下,爽!
设置切换panes tabs windows的快捷键。
最实用且一定要掌握的快捷键
Command + T新建Tab
Command + W关闭选中panes, tab, window
Command + D纵向分割选中的pane
Command + Shift + D横向分割选中的pane
Command + Shift + Enter最大化选中的pane,隐藏其它panes,再次按下就还原布局。
Command + ;提示输入过的命令
Command + Shift + H根据时间弹出历史记录
总结
只需要适当的设置,无需学习任何tmux命令,你也可以熟练使用tmux神器。