tmux使用 转自tankywoo
  

tmux使用 转自tankywoo

三个术语:

tmux有很多组合键, 类似screen, tmux的组合键前缀(prefix)默认是C-b, 如果习惯了screen的C-a, 可以修改prefix, 以下都用C-b表示前缀

快捷键

基本操作

如果有设置 setw -g mode-keys vi 的话,可按 vi 的按键模式操作。移动至待复制的文本处,按一下空格,结合 vi 移动命令开始选择,选好后按回车确认.

session 操作

window 操作

pane 操作

配置文件

以下配置更新会有延迟, 最新配置见我的 dotfiles

# 配置使用和GNU Screen相同的C-a作为命令引导键 默认的C-b 和vim冲突
set -g prefix C-a
# 设置终端类型为256色
set -g default-terminal "screen-256color"

# 设置状态栏左部宽度 set -g status-left-length 40 # 设置状态栏显示内容和内容颜色。这里配置从左边开始显示,使用绿色显示session名称,黄色显示窗口号,蓝色显示窗口分割号 set -g status-left "#[fg=colour52]#S #[fg=yellow]#I #[fg=cyan]#P" # 设置状态栏右部宽度 set -g status-right-length 80 # 设置状态栏右边内容,这里设置为时间信息 set -g status-right "#[fg=colour106]#(~/bin/system_info.sh) #[fg=colour208]|%d %b %R" # 窗口信息居中显示 set -g status-justify centre

# 监视窗口信息,如有内容变动,进行提示 setw -g monitor-activity on set -g visual-activity on set -g status-utf8 on

setw -g mode-keys vi # set-option -g default-command "reattach-to-user-namespace -l zsh"

#colorscheme source-file ~/Develop/dotfiles/tmux/color/solarized-256.conf

# 窗口号和窗口分割号都以1开始(默认从0开始) set -g base-index 1 setw -g pane-base-index 1

# 支持鼠标选择窗口,调节窗口大小 setw -g mode-mouse on set -g mouse-select-pane on set -g mouse-resize-pane on set -g mouse-select-window on set -s escape-time 1

# 设置C-a a为发送C-a键 bind a send-prefix # 加载tmux配置文件的快捷键 bind r source-file ~/.tmux.conf\; display "Reloaded!" # 快捷键查看man bind / command-prompt "split-window 'exec man %%'" unbind "%" unbind "\"" # 修改默认的窗口分割快捷键,使用更直观的符号 bind | split-window -h bind - split-window -v # 选择窗口功能修改为和Screen一样的C-a " bind "\"" choose-window

# 选择窗口分割快捷键 bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R # 选择窗口快捷键 bind -r C-h select-window -t :- bind -r C-l select-window -t :+ # 调节窗口大小快捷键 bind -r H resize-pane -L 5 bind -r J resize-pane -D 5 bind -r K resize-pane -U 5 bind -r L resize-pane -R 5

# 快捷调整窗口分割到全屏 unbind Up bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp unbind Down bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp

# 快捷记录窗口内的内容到文件中 bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"

脚本化tmux

脚本化是 Tmux 的一大亮点

脚本化可以让我们自己定义一些脚本, 来构造自己的tmux布局

比如我写了一个分割三个pane的小脚本放在 ~/.tmux/tanky 里:

select-pane -t 0
split-window -h -p 60
select-pane -t 1
split-window -v -p 25
send-keys -t 0 'ipython' C-m
# The C-m at the end is interpreted by Tmux as the enter key.
select-pane -t 1

google搜出来的讲解tmux脚本化的E文不少, 不过没几个解释了 C-m 是干嘛的, 查看绑定键也没找到
后来在An Introduction to Scripting Tmux Key Bindings上看到了解释.

The C-m at the end is interpreted by Tmux as the enter key.

在 ~/.tmux.conf 里绑定快捷键: bind T source-file ~/.tmux/tanky

这样, 就可以通过快捷键 C-b S-t 一键初始化一个如下图的布局. Script Tmux

另外, 还可以直接写shell脚本, 然后运行, 比如:

#!/bin/bash
# Tanky Woo@2013-06-19 10:51:15
# About:

tmux start-server

if ! $(tmux has-session -t 'tankywoo'); then tmux new-session -d -s 'tankywoo' -n 'tankywoo' # -d * tmux select-window -t 'tankywoo' tmux split-window -h -p 60 tmux select-pane -t 1 tmux split-window -v -p 25 tmux send-keys -t 0 'ipython' C-m # The C-m at the end is interpreted by Tmux as the enter key.

    tmux new-window -n <span class="s1">'ops-dev'</span>

    tmux <span class="k">select</span>-window -t <span class="s1">'tankywoo'</span>
    tmux <span class="k">select</span>-pane -t 1

fi

tmux attach-session -d -t 'tankywoo'

下面这几个链接不错

技巧

批量操作

当需要在多个机器执行相同操作时, 可以考虑用pdsh等内容分发的工具, 而tmux也有它的一种强悍的方式. 在一个windows里打开多个pane, 每个pane登录一台服务器, 设置windows的选项, 在其中一个pane上操作时, 其它pane都会复制相同的操作.

在tmux的命令行里, 使用选项set synchronize-panes on即可.

在不同大小的屏幕打开一个session

TODO

比如在一个较小的桌面打开一个session, 然后又在一个较大的桌面也打开这个session:

tmux attach -t session-name

则会发现在较大的桌面上, 也只会显示和小桌面同样大小的窗口, 其余部分被密密麻麻的小点扩充.

解决方法之一是:

tmux attach -d -t session-name

即先强制 detach 掉小桌面的session, 然后再在较大桌面打开session.

另外, 看到很多帖子说可以设置:

setw -g aggressive-resize on

但是我设置后还是没有成功.

参考:

扩展 - tmux powerline

其他资料

back to the top