本系列文章包括3篇,主要分享我在后端开发过程中使用终端的一些经验和心得,分享fish shell使用,使用tmux终端复用管理会话、窗口,以及vim插件使用,让vim变成强大的IDE。通过阅读本系列文章,你也可以打造一个高效易用的终端,能很大的提高工作的效率,让手指飞起来,让命令行飞起来。
本系列的3篇文章包括:
本系列文章使用的fish配置文件,tmux配置文件和vim插件都上传到了github, cool-terminal-conf.
本文为第二篇,Tmux简明教程。
简介
命令行的典型使用方式是,打开一个终端窗口(terminal window),在里面输入命令。用户与计算机的这种交互,称为一次“会话“(session)。
会话的一个重要特点是,窗口与其启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束。这样会话中的进程也会随之关闭,不管有没有运行完。
tmux就是将会话与窗口”解绑“的工具。
- 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
- 它可以让新窗口”接入”已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分。
配置
tmux配置文件为 ~/.tmux.conf
,我自定义了tmux的快捷键和状态栏,配置项我都写了注释,读者可以根据自己的喜好修改自定义 :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# tmux默认快捷键的前缀是 ctrl-b, 我修改成了 ` (数字键1左边的那个键) # Set Ctrl-b key bindings unbind C-b set -g prefix ` # 窗口索引从1开始,`-1 即切换到第一个窗口 # Count sessions start at 1 set -g base-index 1 # vi模式,v开始选择,y 复制选择内容到剪贴板 # Use vim bindings setw -g mode-keys vi # start selecting text typing 'v' key (once you are in copy mode) bind-key -T copy-mode-vi 'v' send -X begin-selection # # copy selected text to the system's clipboard bind-key -T copy-mode-vi 'y' send -X copy-pipe-and-cancel pbcopy #up bind-key k select-pane -U #down bind-key j select-pane -D #left bind-key h select-pane -L #right bind-key l select-pane -R # 切分窗口,快捷键修改为 - 水平切分窗口, \ 垂直切分窗口 # split window unbind '"' bind - splitw -v unbind % bind \ splitw -h # ctrl + k/j/h/l 调整pane大小 # resize pane bind -r ^k resizep -U 10 # upward (prefix Ctrl+k) bind -r ^j resizep -D 10 # downward (prefix Ctrl+j) bind -r ^h resizep -L 10 # to the left (prefix Ctrl+h) bind -r ^l resizep -R 10 # to the right (prefix Ctrl+l) # Status bar settings # alignment set-option -g status-justify centre # left-bottom corner set-option -g status-left '#[bg=black,fg=green][#[fg=cyan]#S#[fg=green]]' set-option -g status-left-length 20 # window list set-window-option -g window-status-format '#[dim]#I:#[default]#W#[fg=grey,dim]' set-window-option -g window-status-current-format '#[fg=cyan,bold]#I#[fg=blue]:#[fg=cyan]#W#[fg=dim]' # right-bottom status set -g status-right '#[fg=green][#[fg=cyan]%Y-%m-%d#[fg=green]]' # center window status set -g window-status-format "#I:#W" set -g window-status-current-format "#I:#W" # default statusbar colors set -g status-fg white set -g status-bg black # default window title colors set-window-option -g window-status-style fg=white set-window-option -g window-status-style bg=default set-window-option -g window-status-style dim # active window title colors set-window-option -ag window-status-current-style fg=red set-window-option -ag window-status-current-style bg=default set-window-option -ag window-status-current-style bold # command/message line colors set -g message-style fg=white set -g message-style bg=black set -g message-style bright set -g status-keys vi bind-key -T vi-edit Up send -X history-up bind-key -T vi-edit Down send -X history-down set -g status-interval 1 set -g status-justify centre # center align window list # window-name set-option -g allow-rename off |
使用
下面操作的快捷键 ctrl-b
,我配置文件修改为了 `(键盘数字1左边的键)
基本操作
|
|
会话(session)管理
|
|
下图展示<prefix>-s
列出所有session的结果,我们只窗口了一个blog会话,选择session时,也会展示该session中各窗口的缩略图。
窗口(window)管理
|
|
下图展示<prefix>-w
列出所有窗口的结果,可以看到blog会话包含了hugo, post, udp 3个窗口,选择某个窗口时也展示了该窗口包含的pane。
窗格(pane)管理
|
|
下图展示<prefix>-q
显示pane的编号,可以看到窗口3(udp)包含了 0 1 2 三个pane,
其他命令
|
|
总结
tmux终端复用的好处不仅在于将窗口与会话”解绑”,这样即使你不小心关掉了终端,终端中正在运行的程序不会退出,你仍然可以使用 tmux attach
切换到会话中来,同时,一个session可以管理多个窗口和窗格,窗口之间能快速切换,能很大的提高工作效率。