tmux我们先来了解一下tmux的几个要素。tmux的主要元素分为三层:Session,窗口的集合,通常用来概括同一个任务。Session可以有自己的名字,方便任务之间的切换。窗口单个可见窗口。Windows有自己的编号,也可以认为类似于ITerm2中的Tab。Pane窗格,一个被分成小块的窗口,类似于Vim中C-w+v后的效果。下面是tmux中三要素的具体展示安装要求如果要安装tmux,需要安装libevent2.0或以上版本,否则会出现如下错误:control.c:Infunction'control_callback':control.c:63:警告:函数'evbuffer_readln'control.c:63的隐式声明:错误:'EVBUFFER_EOL_LF'未声明(首次在此函数中使用)control.c:63:错误:(每个未声明的标识符仅报告一次control.c:63:错误:对于它出现的每个函数。)control.c:63:警告:赋值从没有castmake的整数生成指针:***[control.o]错误1??安装tmux下载tmuxhttps://github.com/tmux/tmux/releases/download/2.0/tmux-2.0.tar.gz下载libeventhttp://sourceforge.net/projects/levent/?source=typ_redirectcompileinstalllibevent./configure--prefix=/home/harriszh/app&&make&&makeinstall因为考虑到很多用户在服务器上没有root权限,所以安装在home目录下编译安装tmuxsetenvCFLAGS"-L/home/harriszh/app/lib-I/home/harriszh/app/include"&&./configure--prefix=/home/harriszh/app&&make&&makeinstall如果之前没有setenv,那么会遇到下面的错误alerts.o:Infunction`alerts_queue':alerts.c:(.text+0xa0):undefinedreferenceto`event_initialized'cmd-capture-pane.o:Infunction`cmd_capture_pane_exec':cmd-capture-pane.c:(.text+0x549):未定义引用`evbuffer_pullup'cmd-capture-pane.c:(.text+0x554):未定义引用`evbuffer_get_length'cmd-load-buffer.o:在函数`cmd_load_buffer_callback':cmd-load-buffer.c:(.text+0x2cd):未定义引用`evbuffer_get_length'cmd-load-buffer.c:(.text+0x2f9):未定义引用`evbuffer_pullup'cmd-pipe-pane.o:在函数“cmd_pipe_pane_exec”中:cmd-pipe-pane.c:(.text+0x221):未定义对“evbuffer_get_length”的引用cmd-run-shell.o:在函数“cmd_run_shell_callback”中:cmd-run-shell。c:(.text+0x297):未定义引用`evbuffer_get_length'cmd-run-shell.c:(.text+0x33a):未定义引用`evbuffer_pullup'control-notify.o:在函数`control_notify_input':control-notify.c:(.text+0x4f0):对`的未定义引用evbuffer_pullup'control-notify.c:(.text+0x4fb):未定义引用`evbuffer_get_length'control.o:在函数`control_callback':control.c:(.text+0x26):未定义引用`evbuffer_readln'格式。o:在函数`format_cb_pane_tabs':format.c:(.text+0x69c):undefinedreferenceto`evbuffer_get_length'format.c:(.text+0x6c8):undefinedreferenceto`evbuffer_get_length'format.c:(.text+0x6da):未定义引用`evbuffer_pullup'format.o:在函数`format_job_complete':format.c:(.text+0xb1c):未定义引用`evbuffer_get_length'format.c:(.text+0xb52):未定义引用`evbuffer_pullup'format.o:Infunction`format_create':format.c:(.text+0x3a0a):undefinedreferenceto`event_initialized'...配置使用下面是cshell的环境配置setenvLD_LIBRARY_PATH/home/harriszh/app/libsetpath=(/home/harriszh/app/bin:$path)打开tmux在命令行输入tmux,看能否打开我遇到了tmux配置文件的问题。我在~/.tmux.conf中注释掉了不支持的命令来定制可以直接使用gpakosz的tmux。安装方法如下$cd$rm-rf.tmux$gitclonehttps://github.com/gpakosz/.tmux.git$ln-s.tmux/.tmux.conf$cp.tmux/.tmux。本地会议。得到效果可以直接tmuxsource~/.tmux.conf如果想使用类似powerline的效果,可以在~/.tmux.conf.local中注释129-132行,打开133-136行使用打开会话的控制台命令:tmuxnew-s断开会话:tmuxdeattach访问上一个会话:tmuxa-t关闭会话:tmuxkill-session-t关闭窗口:tmuxkill-session-t关闭tmux:tmuxkillall新建一个窗口:tmuxnew-window列出窗口:tmuxlist-windows0-9根据索引进入窗口:tmuxselect-window-t重命名当前窗口:tmuxrename-window将窗口垂直分成两个窗格:tmuxsplit-window将窗口水平分为两个窗格:tmuxsplit-window-h在指定方向交换窗格:tmuxswap-pane-[UDLR]选择指定方向的下一个窗格:tmuxselect-pane-[UDLR]查看全局设置:tmuxshow-options-g查看窗口设置:tmuxshow-options-w查看远程设置:tmuxshow-options-s以下命令需要先按前缀键Basic?获取帮助信息Sessionmanagementscolumnoutallsessions$renamecurrentsessionddisconnectcurrentsessionD选择会话离开;当同时打开多个session时,使用【复制模式,将光标移动到复制内容的位置,空格键开始,方向键选择复制,回车确认,q/Esc退出】粘贴模式,粘贴前先复制按q/Esc退出t显示当前时间窗口管理c创建新窗口&关闭当前窗口l前后窗口切换。修改当前窗口号,相当于重新排序f在所有窗口中搜索关键字,重命名当前窗口w列出所有窗口%水平拆分窗口"垂直拆分窗口n选择下一个窗口p选择上一个窗口0~9选择0~对应的窗口9窗格管理%创建水平窗格》创建垂直窗格paneh将光标移至左窗格*j将光标移至下窗格*l将光标移至右窗格*k将光标移至上窗格*q显示窗格编号o在窗格中切换}与下一个窗格交换位置{与上一个窗格交换位置ctrl+箭头键将边缘移动1个单元格以调整当前窗格的大小alt+箭头键将边缘移动5要调整的单元格当前窗格大小alt+o逆时针旋转当前窗格ctrl+o顺时针旋转当前窗格z最大化当前窗格Pageup向上滚动屏幕,q退出Pagedown向下滚动屏幕,q退出!在新窗口中在X中显示当前窗格关闭当前窗格>要使用带“*”的快捷键,需要提前配置。配置方法请参考上文“Movethecursorbetweenpanes”部分——译者注Othert在当前panekeys中显示时间但是在我的一个环境中它们一直不起作用,我花了好几个小时终于弄明白为什么在源代码key-bindings.c中,有如下字符“bind-Tcopy-modeC-Space发送-Xbegin-selection","bind-Tcopy-modeC-asend-Xstart-of-line","bind-Tcopy-modeC-csend-Xcancel","bind-Tcopy-modeC-esend-Xend-of-line","bind-Tcopy-modeC-fsend-Xcursor-right","bind-Tcopy-modeC-bsend-Xcursor-left","bind-Tcopy-modeC-gsend-Xclear-selection","bind-Tcopy-modeC-ksend-X复制行尾","bind-Tcopy-modeC-nsend-Xcursor-down",..."bind-Tcopy-mode-viSpacesend-Xbegin-selection","bind-Tcopy-mode-vi'$'send-Xend-of-line","bind-Tcopy-mode-vi,send-Xjump-reverse","bind-Tcopy-mode-vi/command-prompt-p'(searchdown)''send-Xsearch-forward\"%%%\"'","bind-Tcopy-mode-vi0send-Xstart-of-line”,一开始我通过C-a:手动输入bind-Tcopy-mode-viSpacesend-Xbegin-selection,但还是没用,尤其是在我注意到我需要使用C-Space而不是Space之后,我才意识到有两种模式,copy-mode和copy-mode-vi。试过手动输入bind-Tcopy-modeSpacesend-Xbegin-selection果然有效,然后在网上找到了进入vi模式的方法(set-window-option-gmode-keysvi),输入进去.tmux.conf,所有问题都解决了。安装tmuxinatortmuxinator是tmux的配置管理工具,解决了tmux服务器关闭后session丢失的问题。tmuxinator可以根据配置文件快速创建一个tmuxsession。geminstalltmuxinator在$HOME/.tmuinator/.tmuxinator.bash#!/usr/bin/envbash_tmuxinator(){COMPREPLY=()localwordword="${COMP_WORDS[COMP_CWORD]}"if["$COMP_CWORD"-eq1];然后localcommands="$(compgen-W"$(tmuxinatorcommands)"--"$word")"localprojects="$(compgen-W"$(tmuxinatorcompletionsstart)"--"$word")"COMPREPLY=($commands$projects)elif["$COMP_CWORD"-eq2];然后本地单词words=("${COMP_WORDS[@]}")unsetwords[0]unsetwords[$COMP_CWORD]localcompletionscompletions=$(tmuxinatorcompletions"${words[@]}")COMPREPLY=($(compgen-W"$completions"--"$word"))fi}complete-F_tmuxinatortmuxinatormux然后在Addsource$HOME/.tmuxinator/.tmuxinator.bashexportEDITOR='vim'source$HOME/.bashrcin$HOME/.bashrc使其生效如果你使用zhs,使用下面的文件“$(TMuxinatorcompletionsstart)"})if((CURRENT==2));then_describe-tcommands"tmuxinatorsubcommands"commands_describe-tprojects"tmuxinatorprojects"项目elif((CURRENT==3));thencase$words[2]incopy|debug|delete|open|start)_arguments'*:projects:($projects)';;esacfireturn}tmuxinator常用命令muxnws#创建项目wsmuxows#打开项目ws配置文件muxews#同上muxcwsws1#复制ws项目到ws1muxdws#删除ws项目muxl#显示所有项目muxws#打开ws项目配置新建项目后,会打开一个文本name:ws#sessionnameroot:~/#项目的根目录,活动的Pane会先cd到这个目录下第一个Pane运行vim命令-guard#第二个Pane运行guard命令-server:bundleexecrailss#第二个Window名为server,运行命令是bundle-logs:tail-flog/development.log#第三个A名为logs的窗口,运行命令tail修改上面的editor,server,logs(窗口名)或者panes下每个pane要执行的命令,如果什么都不执行,在tmuxinator中写-bugfix,会出现如下错误删除项目时报告$tmuxinatordwsAreyousureyouwanttodeletews?(y/n)y/usr/local/lib/ruby/gems/2.4.0/gems/tmuxinator-0.9.0/lib/tmuxinator/cli.rb:220:在`blockindelete'中:未初始化常量Tmuxinator::Cli::FileUtils(NameError)Didyoumean?来自/usr/local/lib/ruby/gems/2.4.0/gems/tmuxinator-0.9.0/lib/tmuxinator/cli.rb:215:in`each'来自/usr/local/lib/ruby/gems的FileTest/2.4.0/gems/tmuxinator-0.9.0/lib/tmuxinator/cli.rb:215:从/usr/local/lib/ruby/gems/2.4.0/gems/thor-0.20.0中“删除”/lib/thor/command.rb:27:in从/usr/local/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in`run'来自/usr/local/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:in`dispatch'来自/usr/local/lib/ruby/gems的`invoke_command'/2.4.0/gems/thor-0.20.0/lib/thor/base.rb:466:in`start'从/usr/local/lib/ruby/gems/2.4.0/gems/tmuxinator-0.9.0/bin/tmuxinator:15:in`'from/usr/local/bin/tmuxinator:23:in`load'来自/usr/local/bin/tmuxinator:23:in`'需要在/usr/local/lib/ruby/gems/2.4.0/gems/tmuxinator-0.9.0/lib/tmuxinator/cli.rb第二行加上require'fileutils'总结了tmux最大的优点就是可以保存状态。对于登录服务器工作的人来说,可以节省很多时间,多窗口节省了打开很多窗口的时间。使用它可以极大的提高工作效率。此外,它可以定制。与同类瓦片式窗口管理器相比,提供了更多的自定义和快捷键,是同类软件中的佼佼者。