Skip to content

Instantly share code, notes, and snippets.

@mba811
Last active August 29, 2015 14:13
Show Gist options
  • Save mba811/9a6542bc4d1c89545b50 to your computer and use it in GitHub Desktop.
Save mba811/9a6542bc4d1c89545b50 to your computer and use it in GitHub Desktop.
tmux 终端伴侣

##Homebrew 安裝 tmux

首先要安裝 Homebrew,沒有安裝過的話只要在終端機執行這一行指示即可:

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

儘管剛剛才安裝 Homebrew 但是還是要先更新一下再安裝程式:

brew update
brew install tmux

tmux 運作方式

2013.04.19 更新:Youtube 上 tmux Quick Start 這部影片介紹非常清楚,值得一看。

從 SuperUser 看到的答案,如果關閉終端機掛載在上面的 shells 也會跟著被刪除,結構就像是這樣:

iterm2
  +---- shell
  +---- shell
  +---- shell

tmux 採用 client-server 的 model,每一個 session 作為一個 client。透過 tmux 仍然會保持所有 shells 繼續運作,即便把整個終端機都關閉,因此可以之後重新將他們重新掛載上去,這也是為什麼在 tmux 下用 ssh 登入遠端主機不會斷線的原因:

iterm2
  +---- tmux
          +---- shell
          +---- shell
          +---- shell

tmux 基本用法

直接在終端機執行 tmux 會開啟第一個 client,可以執行 tmux ls 查看有哪些 client,如果沒有任何 client 可以用,tmux 會自動建立一個。執行 tmux 後終端機底部會顯示一條狀態欄:

tmux

tmux 預設的操作要加上 Ctrl-b 功能鍵;tmux 也有類似 Vim 的指令模式,快捷鍵 Ctrl-b 後按 : 可以執行指令。以下是一些基本、常用的功能:

  • Ctrl-b + c:建立新的視窗;
  • Ctrl-b + d:卸載目前的 client;
  • Ctrl-b + l:與先前選擇的視窗間切換;
  • Ctrl-b + n:移動到下個視窗;
  • Ctrl-b + p:移動到上個視窗;
  • Ctrl-b + &:刪除目前的視窗;
  • Ctrl-b + ,:重新命名目前的視窗;
  • Ctrl-b + %:將目前的視窗分離到兩個區塊;
  • Ctrl-b + q:顯示各分割區塊的號碼(用來切換到不同的區塊)
  • Ctrl-b + o:切換到下個區塊;
  • Ctrl-b + ?:列出所有快捷鍵的說明;
  • Ctrl-b + w:列出目前 clinet 的視窗,可以用數字鍵切換;

要將目前視窗切割多個區塊,快捷鍵如下:

  • Ctrl-b + %:垂直分離視窗;
  • Ctrl-b + :split-window:水平分離視窗;
  • Ctrl-b + o:移往下一個區塊;
  • Ctrl-b + q:顯示區塊的數字代號,當數字顯示時使用數字鍵移往該區塊;
  • Ctrl-b + {:將目前的區塊移往左邊;
  • Ctrl-b + }:將目前的區塊移往右邊;

個人設定

切割面板區塊的快捷鍵好像有點難記,可以在根目錄下建立 ~/.tmux.conf 檔案,定義自己容易記憶的快捷鍵:

unbind %
bind | split-window -h
bind – split-window -v

Ctrl-b 距離太遠也很難按,先前有用 GNU screen 的人會將它改成 Ctrl-a,可是這會和某些快捷鍵衝突,所以我把它改成 Ctrl-f:

set -g prefix C-f
unbind C-b
bind C-f send-prefix

我的 .tmux.conf 檔案放在我 Github 上的 .dotfiles 裡,有興趣可以去看看,這裡附上最後我修改的成果圖,加上原本 oh-my-zsh 修改結果,整個變得超級花俏啊 XD(點圖可放大):

tmux-final

底下的 status bar 是抄 wemux 作者的設定,我覺得非常漂亮。最後推薦這兩個連結的文章,介紹非常詳細:

可以與 iTerm2 整合

iTerm2 wiki 頁面上有教怎麼跟 tmux 整合,看了一下說要下載一些東西,然後還要編譯過才能用,可是我發現我直接輸入 tmux -CC 就可以用了,不清楚發生什麼事。

跟 iTerm2 整合的好處是可以用 iTerm2 的分頁和切割區塊功能取代 tmux 那些一堆的指令,可是我試用的結果發現很多不方便的地方,所以我還是用原本 tmux 切割區塊的方式。

已知問題

目前發現有兩個問題。

在 tmux 下無法使用系統 pbcopy 等複製貼上的指令,在 thoughtbot 網站上找到解決方法:

brew install reattach-to-user-namespace

然後在 .tmux.conf 檔案裡加上以下這行設定:

set-option -g default-command "reattach-to-user-namespace -l zsh"

還有個問題是 git commit 我預設用的是 Sublime Text 2 編輯器,可是編輯提交訊息後會卡住不動,也就是 subl -w 無法返回,目前無解。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment