[Linux] tmux 終端複用命令行工具

tmux 終端複用命令行工具

tmux 是一款終端複用命令行工具,一般用於 Terminal 的窗口管理.能夠在終端軟件重啓後經過命令行恢復上次的 session.shell

安裝運行

macOS 上使用 Homebrew 安裝便可:vim

brew install tmux

在 shell 主進程下運行如下命令能夠操做 tmux 會話:session

tmux new -s foo # 新建名稱爲 foo 的會話
tmux ls # 列出全部 tmux 會話
tmux a # 恢復至上一次的會話
tmux a -t foo # 恢復名稱爲 foo 的會話,會話默認名稱爲數字
tmux kill-session -t foo # 刪除名稱爲 foo 的會話
tmux kill-server # 刪除全部的會話

快捷鍵

通常狀況下 tmux 中全部的快捷鍵都須要和前綴快捷鍵 ⌃b 來組合使用.less

窗格(pane)操做

  • % 左右平分出兩個窗格
  • " 上下平分出兩個窗格
  • x 關閉當前窗格
  • { 當前窗格前移
  • } 當前窗格後移
  • ; 選擇上次使用的窗格
  • o 選擇下一個窗格,也可使用上下左右方向鍵來選擇
  • space 切換窗格佈局,tmux 內置了五種窗格佈局,也能夠經過 ⌥1 至 ⌥5來切換
  • z 最大化當前窗格,再次執行可恢復原來大小
  • q 顯示全部窗格的序號,在序號出現期間按下對應的數字,便可跳轉至對應的窗格

窗口操做

  • c 新建窗口,此時當前窗口會切換至新窗口,不影響原有窗口的狀態
  • p 切換至上一窗口
  • n 切換至下一窗口
  • w 窗口列表選擇,注意 macOS 下使用 ⌃p 和 ⌃n 進行上下選擇
  • & 關閉當前窗口
  • , 重命名窗口,可使用中文,重命名後能在 tmux 狀態欄更快速的識別窗口 id
  • 0 切換至 0 號窗口,使用其餘數字 id 切換至對應窗口
  • f 根據窗口名搜索選擇窗口,可模糊匹配

會話操做

在 tmux 會話中,使用前綴快捷鍵 ⌃b 配合如下快捷鍵可操做會話:工具

  • $ 重命名當前會話
  • s 選擇會話列表
  • d detach 當前會話,運行後將會退出 tmux 進程,返回至 shell 主進程

常見配置與問題

一、鼠標滾屏

在中.tmux.conf 配置文件增長如下內容:佈局

開啓鼠標模式

set -g mode-mouse on
spa

容許鼠標選擇窗格

set -g mouse-select-pane on
pwa

若是喜歡給窗口自定義命名,那麼須要關閉窗口的自動命名

set-option -g allow-rename off
命令行

若是對 vim 比較熟悉,能夠將 copy mode 的快捷鍵換成 vi 模式

set-window-option -g mode-keys virest

配置文件修改完成後,能夠 tmux kill-server 重啓全部 tmux 進程,或者在 tmux 會話中使用 ⌃b : 進入控制檯模式,輸入 source-file ~/.tmux.conf 命令從新加載配置。

二、複製

  • 方法 1:使用 ⌃b z 進入窗格全屏模式,鼠標選擇文本的同時按住 option 鍵 ⌥,而後使用 ⌘c 進行復制;

  • 方法 2 配置文件增長如下配置後,ESC進入複製模式 v 選擇文本 y 複製文本.

bind Escape copy-mode # 綁定esc鍵爲進入複製模式                                                                                                                              
bind -T copy-mode-vi v send-keys -X begin-selection # 綁定v鍵爲開始選擇文本     
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel # 綁定y鍵爲複製選中文本

個人.tmux.conf

# 修改 ctrl+b 前綴爲 ctrl+a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# set-option -g prefix2 `
# 綁定重載 settings 的熱鍵
bind r source-file ~/.tmux.conf \; display-message "Config reloaded.."

# 設置爲vi編輯模式
setw -g mode-keys vi # 設置爲vi編輯模式
bind Escape copy-mode # 綁定esc鍵爲進入複製模式
bind -T copy-mode-vi v send-keys -X begin-selection # 綁定v鍵爲開始選擇文本
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel # 綁定y鍵爲複製選中文本

set-option -g default-command 'exec reattach-to-user-namespace -l zsh'
bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'reattach-to-user-namespace pbcopy'
# bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"

# bind-key C-c run-shell 'tmux save-buffer - | reattach-to-user-namespace pbcopy'
# bind-key C-v run-shell 'reattach-to-user-namespace pbpaste | tmux load-buffer - \; paste-buffer -d'

# 設置window的起始下標爲1
set -g base-index 1
# 設置pane的起始下標爲1
set -g pane-base-index 1

#-- base --#
set -g default-terminal "screen-256color"
set -g display-time 3000
set -g history-limit 65535

# 鼠標支持
set-option -g mouse on
# 關閉默認窗口標題
set -g set-titles off

#-- bindkeys --#
unbind '"'
bind - splitw -v -c '#{pane_current_path}'
unbind %
bind | splitw -h -c '#{pane_current_path}'

bind c new-window -c "#{pane_current_path}"

# 定義上下左右鍵爲hjkl鍵
bind -r k select-pane -U
bind -r j select-pane -D
bind -r h select-pane -L
bind -r l select-pane -R

# 定義面板邊緣調整的^k ^j ^h ^l快捷鍵
bind -r ^k resizep -U 1 # upward (prefix Ctrl+k)
bind -r ^j resizep -D 1 # downward (prefix Ctrl+j)
bind -r ^h resizep -L 1 # to the left (prefix Ctrl+h)
bind -r ^l resizep -R 1 # to the right (prefix Ctrl+l)

# 定義交換面板的鍵
# bind ^u swap-pane -U
# bind ^d swap-pane -D

# bind e lastp 
# bind ^e last
# bind q killp

#bind '~' splitw htop
#bind ! splitw ncmpcpp
# bind m command-prompt "splitw 'exec man %%'"
# bind @ command-prompt "splitw 'exec perldoc -t -f %%'"
# bind * command-prompt "splitw 'exec perldoc -t -v %%'"
# bind % command-prompt "splitw 'exec perldoc -t %%'"
# bind / command-prompt "splitw 'exec ri -T %% | less'"

# 輸出日誌到桌面
# bind P pipe-pane -o "cat >>~/Desktop/#W.log" \; display "Toggled logging to ~/Desktop/#W.log"

#-- statusbar --#
set -g status-right-attr bright
set -g status-bg black
set -g status-fg yellow

# 設置狀態欄高亮
setw -g window-status-current-attr bright
# 設置狀態欄紅底白字
setw -g window-status-current-bg red
setw -g window-status-current-fg white

# 設置狀態欄列表左對齊
set -g status-justify left
# 非當前window有內容更新時在狀態欄通知
setw -g monitor-activity on
set -g status-interval 1

#set -g visual-activity on

setw -g automatic-rename off
setw -g allow-rename off
# 最大化(默認爲z,增長模擬的b指令)
# unbind b
# bind b run ". ~/.tmux/zoom"

# set -g status-keys vi

# plugin-manager
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# plugins
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'

# load-plugins-without-manager
#run-shell ~/.tmux/tmux-resurrect/resurrect.tmux
#run-shell ~/.tmux/tmux-continuum/continuum.tmux

# plugins-settings
set -g @resurrect-strategy-vim 'session' # for vim
set -g @resurrect-strategy-nvim 'session' # for neovim
set -g @continuum-save-interval '180' # '0'
set -g @continuum-restore 'on'
set -g @continuum-boot-options 'fullscreen'

set -g status-right 'Continuum status: #{continuum_status}'
set -wg window-status-format " #I:#W "
setw -g window-status-current-format " #I:#W "
set -wg window-status-separator ""
set -g message-style "bg=#202529, fg=#91A8BA"

set -g @resurrect-capture-pane-contents 'on' # 恢復面板內容

run '~/.tmux/plugins/tpm/tpm'
相關文章
相關標籤/搜索