使用tmux管理terminal

tmux是一个管理terminal窗口的软件, 可以split窗口, 创建窗口, 形成类似tab的效果, ArchWiki tmux. 类似的terminal窗口管理的软件, 还有GNU Screen.

terminal多分页的使用, 有效的避免了一次性打开多个窗口, 从而导致桌面混乱, 难以有效管理的情况. 使用tmux不仅在有效利用窗口空间的同时大大提高了效率, 更重要的, 使terminal更加美观可视化, 看着就很专业的样子#(手动狗头).

基本的tmux操作, 请参考Tmux Cheat Sheet & Quick Reference, 用户的tmux配置文件默认为~/.tmux.conf, 可以参考我的配置.

tmux和vim的配合窗口切换

Vim中使用插件christoomey/vim-tmux-navigator, 并分别在.vimrc.tmux.conf中添加一下配置, 即可非常便捷的在Vim和tmux之间实现窗口切换. nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

# Smart pane switching with awareness of Vim splits.
# See: https://github.com/christoomey/vim-tmux-navigator{
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h'  'select-pane -L'
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j'  'select-pane -D'
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k'  'select-pane -U'
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l'  'select-pane -R'
tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
    "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\'  'select-pane -l'"
if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
    "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\'  'select-pane -l'"

bind-key -T copy-mode-vi 'C-h' select-pane -L
bind-key -T copy-mode-vi 'C-j' select-pane -D
bind-key -T copy-mode-vi 'C-k' select-pane -U
bind-key -T copy-mode-vi 'C-l' select-pane -R
bind-key -T copy-mode-vi 'C-\' select-pane -l
# }

powerline in tmux

tmux中配置powerline status bar非常简单, 参考powerline in tmux.

但是对于tmux的status bar, 个人更倾向于表现更为简洁的自配置.

配置样式容易出现的问题

可参考的tmux配置可以很轻松的找到很多, (大家都很nice, 必须感谢这些乐意分享的tinker们), 但是有一些配置, 放在自己的.tmux.conf就报错了.

原因是, tmux 1.9版本以前, 样式使用三种配置: 前景色(例如mode-fg), 背景色(例如mode-bg), 和属性(例如mode-attr), 例如: set -g mode-fg yellow
set -g mode-bg red
set -g mode-attr blink,underline
从tmux 1.9开始, 整合三种配置为一个(例如mode-style), 并在tmux 2.9移除了三种独立的配置. 故而新版本的tmux应使用整合的配置, 例如: set -g mode-style fg=yellow,bg=red,blink,underline

相关的说明, 或想了解更新的相关细节, 参考How do I translate -fg, -bg and -attr options into -style options?.