2017年12月21日 星期四

終端機管理工具:tmux

 

之前用 tmux 的一些雜記,enjoy it!




一、tmux 簡介


程式設計師要在終端機下開發程式時(尤其 Mac 和 Unix-like 使用者),總是要使用一個高效率的終端選擇器 (terminal multiplexer),過去的程式設計師常用的終端選擇器是 screen,但現在有更方便操作的 tmux 囉!終端選擇器主要有以下功能:

  1. 輕鬆實現命令列視窗管理:如分割視窗、視窗切換,在需要高速切換檔案的系統程式設計尤其重要,和 Unix-like 的工具尤其契合。
  2. 保持工作環境狀態:例如,當 ssh 連線遠端伺服器突然斷線時,tmux 會讓該會話 (session) 在背景執行 (detached),只要連回該會話便可以馬上重回之前的工作環境。

因為我以前用過 screen 和 vim,所以下面的設定會調整成 screen-like 和 vim-like, 直接學 tmux 或使用 emacs 的使用者也可以在網路上找到相關的設定。




二、安裝與設定檔


老樣子,用套件管理工具無腦安裝:

brew install tmux # Mac
apt-get install tmux # Ubuntu
which tmux # check install
tmux # start tmux world!


建立 .tmux.conf 設定檔,下面是我用的設定檔,因為以前是用 vim 和 screen,所以把預設的快捷鍵轉成 screen-like 和 vim-like。:

vim ~/.tmux.conf


貼上以下設定完成初步設定 (註釋有解釋設定了哪些功能):

### rebind hotkey

# prefix setting (screen-like)
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# reload config without killing server
bind R source-file ~/.tmux.conf \; display-message "Config reloaded..."

# "|" splits the current window vertically, and "-" splits it horizontally
unbind %
bind | split-window -h
bind - split-window -v

# Pane navigation (vim-like)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# Pane resizing
bind -r Left  resize-pane -L 4
bind -r Down  resize-pane -D 4
bind -r Up    resize-pane -U 4
bind -r Right resize-pane -R 4


### other optimization

# set the shell you like (zsh, "which zsh" to find the path)
# set -g default-command /bin/zsh
# set -g default-shell /bin/zsh

# use UTF8
# set -g utf8
# set-window-option -g utf8 on

# display things in 256 colors
set -g default-terminal "screen-256color"

# mouse is great!
set-option -g mouse on

# history size
set -g history-limit 10000

# fix delay
set -g escape-time 0

# 0 is too far
set -g base-index 1
setw -g pane-base-index 1

# stop auto renaming
setw -g automatic-rename off
set-option -g allow-rename off

# renumber windows sequentially after closing
set -g renumber-windows on

# window notifications; display activity on other window
setw -g monitor-activity on
set -g visual-activity on





三、基本概念與操作


在 tmux 操作架構中,有以下基本名詞需要認識:

  • 會話 (Session) : ,視窗的集合。
  • 視窗 (Window) : 一個覆蓋滿區塊的視窗。
  • 區塊 (Pane): 一個跑特定命令的區塊,例如 shell。


session、window 和 panel 示意圖 (ref)

在 tmux 中,都是按完 <prefix key> 後再按你需要的快捷指令,預設的 prefix 鍵位是 ctrl + b,我的 config 檔把它改到 screen-like 的 ctrl + a。常用的快捷指令如下:


1. 視窗指令


<prefix> c     開新視窗
<prefix> &     關閉視窗
<prefix> 0~9     切換至指定視窗
<prefix> n     切換到下一個視窗 (next)
<prefix> p     切換到上一個視窗 (previous)
<prefix> f     找尋指定 pattern 並跳到該視窗
<prefix> ,     命名視窗


2. 區塊指令


<prefix> |     水平分割視窗
<prefix> -     垂直分割視窗
<prefix> 方向鍵     分割視窗大小調整
<prefix> h,j,k,l (vim 方向鍵)     切換游標所在區塊
<prefix> space     重新佈局分割視窗,內建多種佈局。
<prefix> x     關閉當前面板
<prefix> q     顯示面板編號
<prefix> {     交換面板位置(向前)
<prefix> }     交換面板位置(向後)


3. 系統操作


<prefix> d     將目前的 session 放到背景執行 (detach)
<prefix> s     切換 session
<prefix> [     進入複製模式
<prefix> :     進入命令模式
<prefix> ?     查詢快捷鍵


4. 指令操作


直接在命令列上輸入指令,或在 tmux 中按下 <prefix> : 之後輸入 tmux 字串後的語句。

tmux      啟動
tmux ls      列出所有 session
tmux detach      背景執行
tmux attach -t [num]     回到第 [num] 號 session
tmux kill-session -t [num]     關閉第 [num] 號 session
tmux kill-session -a     關閉除了自己的所有 session


其他不常用的用到再看 Cheat Sheet : )

Tmux Cheat Sheet & Quick Reference
http://tmuxcheatsheet.com/




四、tmux 的套件管理工具: TPM


一個滿方便的 tmux 的套件管理工具,滿推薦的。

複製 tpm 專案:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm


在設定檔最後加上這些內容:

### tmux plugin manager

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'jooize/tmux-powerline-theme'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'


重啟終端機或 tmux source ~/.tmux.conf 後,進入 tmux 使用以下指令:

  • [prefix] + I 安裝插件
  • [prefix] + U 更新插件
  • [prefix] + alt + u 刪除插件

就完成囉!





References


Ham Vocke - A Quick and Easy Guide to tmux
http://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/

tpm - Tmux Plugin Manager

Harttle - 優雅地使用命令行:Tmux 終端覆用

Tmux Cheat Sheet & Quick Reference
http://tmuxcheatsheet.com/





技術提供:Blogger.