tmux是一个管理terminal窗口的软件, 可以split窗口, 创建窗口, 形成类似tab的效果, ArchWiki tmux. 类似的terminal窗口管理的软件, 还有GNU Screen.
terminal多分页的使用, 有效的避免了一次性打开多个窗口, 从而导致桌面混乱, 难以有效管理的情况. 使用tmux不仅在有效利用窗口空间的同时大大提高了效率, 更重要的, 使terminal更加美观可视化, 看着就很专业的样子#(手动狗头).
基本的tmux操作, 请参考Tmux Cheat Sheet & Quick Reference, 用户的tmux配置文件默认为~/.tmux.conf, 可以参考我的配置.
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
# }
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
从tmux 1.9开始, 整合三种配置为一个(例如mode-style), 并在tmux 2.9移除了三种独立的配置.
故而新版本的tmux应使用整合的配置, 例如:
set -g mode-bg red
set -g mode-attr blink,underline
set -g mode-style fg=yellow,bg=red,blink,underline
相关的说明, 或想了解更新的相关细节, 参考How do I translate -fg, -bg and -attr options into -style options?.