ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## tmux介绍 tmux是一个优秀的终端复用软件,split窗口。可以在一个terminal下打开多个终端。 即使非正常掉线,也能保证当前的任务运行,这一点对于远程SSH访问特别有用,网络不好的情况下仍然能保证工作现场不丢失。SSH重新连接以后,就可以直接回到原来的工作环境,不但提高了工作效率,还降低了风险,增加了安全性。 常用[tmux配置文件 .tmux.conf][1] ## tmux的基本概念 Session:连接。是一组Window的集合。 Window:单个可见窗口。类似一个标签页。是一组Pane的组合。 Pane:窗格。可以理解为一个分屏。 三个元素在tmux的具体展现如下图,盗取自伯乐在线。 ![](https://ws3.sinaimg.cn/large/006tNc79gy1fospuz6zrvj30j6092400.jpg) ## tmux的安装 一般采用网络直接安装的方式。 ~~~ yum install tmux sudo apt-get install tmux ~~~ ## 信息查询 ~~~ tmux list-keys 列出所有可以的快捷键和其运行的 tmux 命令 tmux list-commands 列出所有的 tmux 命令及其参数 tmux info 流出所有的 session, window, pane, 运行的进程号,等。 ~~~ ## 有关Session的命令和快捷键 session是一个特定的终端组合。 ~~~ tmux 开启一个新的Session tmux new -s session_name 创建一个叫做 session tmux attach -t session_name 重新开启叫做 session tmux switch -t session_name 转换到叫做 session tmux list-sessions / tmux ls 列出现有的所有 session tmux detach 离开当前开启的 session tmux kill-server 关闭所有 session tmux kill-session -t 0 关闭编号为0的session; 不加-t则删除全部session tmux source .tmux.conf 使配置在所有session即时生效 快捷键 操作 prefix s 查看/切换Session prefix d 离开Session prefix $ 重命名当前Session ~~~ ## 有关Window的命令和快捷键 session 中可以有不同的 window(但是同时只能看到一个 window)。 ~~~ tmux new-window -n window-name 创建一个新的 window tmux list-windows 列出window tmux select-window -t 0-9 根据索引转到该 window tmux rename-window 重命名当前 window 快捷键 操作 prefix c 创建Window prefix & 关闭Window prefix n 切换到下一个Window prefix p 切换到上一个Window prefix Window号 切换Window号 prefix w 查看/切换Window ~~~ ## 有关Pane的快捷键 window 中可以有不同的 pane(可以把 window 分成不同的部分)。 ~~~ tmux split-window 将 window 垂直划分为两个 pane tmux split-window -h 将 window 水平划分为两个 pane tmux swap-pane -[UDLR] 在指定的方向交换 pane tmux select-pane -[UDLR] 在指定的方向选择下一个 pane 快捷键 操作 prefix % 垂直拆分一个Pane prefix “ 水平拆分一个Pane prefix q 显示Pane编号 prefix o 切换到下一个Pane prefix z 切换Pane的全屏 prefix Alt + 方向 调整Pane的大小 ~~~ ## tmuxinator tmuxinator是tmux的配置管理工具,解决了tmux服务器关机后session丢失问题。tmuxinator可以根据配置文件快速创建tmux的session。 ### 安装 ~~~ yum install ruby gem install tmuxinator ~~~ ### 基础设置 #### bash版 ~~~ #!/usr/bin/env bash _tmuxinator() { COMPREPLY=() local word word="${COMP_WORDS[COMP_CWORD]}" if [ "$COMP_CWORD" -eq 1 ]; then local commands="$(compgen -W "$(tmuxinator commands)" -- "$word")" local projects="$(compgen -W "$(tmuxinator completions start)" -- "$word")" COMPREPLY=( $commands $projects ) elif [ "$COMP_CWORD" -eq 2 ]; then local words words=("${COMP_WORDS[@]}") unset words[0] unset words[$COMP_CWORD] local completions completions=$(tmuxinator completions "${words[@]}") COMPREPLY=( $(compgen -W "$completions" -- "$word") ) fi } complete -F _tmuxinator tmuxinator mux ~~~ $HOME/.bashrc下增加下述内容: ~~~ source $HOME/.tmuxinator/.tmuxinator.bash export EDITOR=/usr/bin/vim ~~~ source $HOME/.bashrc使其生效。 #### zsh版 将下述文本保存为$HOME/.tmuxinator/.tmuxinator.zsh,提供zsh的tab键提示功能 ~~~ _tmuxinator() { local commands projects commands=(${(f)"$(tmuxinator commands zsh)"}) projects=(${(f)"$(tmuxinator completions start)"}) if (( CURRENT == 2 )); then _describe -t commands "tmuxinator subcommands" commands _describe -t projects "tmuxinator projects" projects elif (( CURRENT == 3)); then case $words[2] in copy|debug|delete|open|start) _arguments '*:projects:($projects)' ;; esac fi return } ~~~ $HOME/.zshrc下增加下述内容: ~~~ source $HOME/.tmuxinator/.tmuxinator.zsh export EDITOR=/usr/bin/vim ~~~ source $HOME/.zshrc使其生效。 ### 常用命令 Tmuxinator的一个工程(Project)对应tmux的一个session。 ~~~ new简写为n,open简写为o,edit简写为e,list简写为l,copy简写为c,delete简写为d。 tmuxinator n ws # 创建工程ws tmuxinator o ws # 打开工程ws的配置文件 tmuxinator e ws # 同上 tmuxinator c ws ws1 # 复制ws工程到ws1 tmuxinator d ws # 删除ws工程 tmuxinator l # 显示所有工程 tmuxinator ws # 开启ws工程 ~~~ ### 配置文件 #### 配置 ~~~ name: ws # session名称 root: ~/ # 工程根目录,活动Pane会首先cd到此目录 windows: - editor: # 第1个名为Editor的Window layout: main-vertical # Pane的布局 panes: # 各个Pane - vim # 第一个Pane运行vim命令 - guard # 第二个Pane运行guard命令 - server: bundle exec rails s # 第2个名为server的Window,运行命令为bundle - logs: tail -f log/development.log # 第3个名为logs的Window,运行命令为tail ~~~ #### 布局方式layout even-horizontal ![](https://ws1.sinaimg.cn/large/006tNc79gy1fotpqy8m5qj311y0lc0yt.jpg) even-vertical ![](https://ws4.sinaimg.cn/large/006tNc79gy1fotprzoefoj311y0lcgp5.jpg) main-horizontal ![](https://ws2.sinaimg.cn/large/006tNc79gy1fotpstnepgj311y0lc43f.jpg) main-vertical ![](https://ws2.sinaimg.cn/large/006tNc79gy1fotptg43xtj311y0lc459.jpg) tiled ![](https://ws1.sinaimg.cn/large/006tNc79gy1fotptwd6cjj311y0lc43w.jpg) http://blog.csdn.net/ZCF1002797280/article/details/51859524 https://www.jianshu.com/p/fd3bbdba9dc9 [1]:https://gist.coding.net/u/echohiyang/a9f1032993c54ab0b5732fe85b97d6ab/raw/ebbbcc7d7f78437c5357fbc6cb45006eed52d370/.tmux.conf