一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Tmux 速成教程:技巧和調(diào)整

 書*金 2017-03-26


譯文:伯樂在線專欄作者 - 胡屹

英文:Tonatiuh Nu?ez

如有好文章投稿,請點擊 → 這里了解詳情

如需轉(zhuǎn)載,發(fā)送「轉(zhuǎn)載」二字查看說明


簡介


有些開發(fā)者經(jīng)常要使用終端控制臺工作,導(dǎo)致最終打開了過多的標簽頁。如果你也是他們當(dāng)中的一員,或者你正在實踐結(jié)對編程,那么我推薦你讀一讀這篇文章。從上個月開始,我開始大量使用 Tmux 并且發(fā)現(xiàn) Tmux 非常實用,所以我想應(yīng)該寫一篇文章,與諸位分享一些有關(guān)使用 Tmux 的建議和專業(yè)方案。本文將先介紹 Tmux 是什么,然后講解如何使用 Tmux,才能使其同 Vim 結(jié)合起來,打造出更高效、更優(yōu)雅的終端工具。


本文將會包含以下內(nèi)容:


  • Tmux 的基礎(chǔ)

  • Tmux 中最棒的功能

    • 窗口(Window)

    • 窗格(Pane)

    • 會話(Session)

    • 快速在文本間移動光標或復(fù)制文本

    • 非常輕巧的結(jié)對編程功能

  • 調(diào)整 Tmux 以增強其同 Vim 的集成度

    • 調(diào)整背景的配色方案

    • 調(diào)整光標的形狀

    • 調(diào)整粘貼時的文本縮進

  • 其他能夠提升 Tmux 體驗的工具或技巧

    • 用 Tmuxinator 自動創(chuàng)建會話

    • 改變 Tmux 狀態(tài)欄的顏色

請注意,在撰寫本文的過程中,我安裝了以下這一組軟件,并在測試時使用了這些版本:


  • Tmux 1.9a

  • Vim 7.4

  • iTerm 2.1

  • Mac OS (Mavericks and Yosemite)


讓我們開始吧!


基礎(chǔ)知識


什么是Tmux?


Tmux 是一個工具,用于在一個終端窗口中運行多個終端會話。不僅如此,你還可以通過 Tmux 使終端會話運行于后臺或是按需接入、斷開會話,這個功能非常實用。稍后,我們將會看到如何充分地利用這個功能。


如圖所示,這就一個是 Tmux 的會話:



從圖中我們可以看出:


  • 左側(cè):Vim

  • 右側(cè):系統(tǒng) Shell

  • 左下方:Tmux 會話的名字(“pomodoro-app”)

  • 下方的中部:當(dāng)前會話中的 Tmux 窗口(“app log”、“editor”和 “shell”)

  • 右下方:當(dāng)前的日期


如何安裝 Tmux?


在 Mac OS 中安裝:

  • 安裝 Homebrew


ruby -e '$(curl -fsSL https://raw./Homebrew/install/master/install)'


有關(guān)安裝 homebrew 的詳細的信息可以參考這里。


安裝 Tmux


$ brew install tmux


在 Ubuntu 中安裝:

在終端輸入如下命令:


sudo apt-get install tmux


Tmux 的快捷鍵前綴(Prefix)


為了使自身的快捷鍵和其他軟件的快捷鍵互不干擾,Tmux 提供了一個快捷鍵前綴。當(dāng)想要使用快捷鍵時,需要先按下快捷鍵前綴,然后再按下快捷鍵。Tmux 所使用的快捷鍵前綴默認是組合鍵 Ctrl-b(同時按下 Ctrl 鍵和 b 鍵)。例如,假如你想通過快捷鍵列出當(dāng)前 Tmux 中的會話(對應(yīng)的快捷鍵是 s),那么你只需要做以下幾步:


  • 按下組合鍵 Ctrl-b (Tmux 快捷鍵前綴)

  • 放開組合鍵 Ctrl-b

  • 按下 s 鍵


這里有一些小建議:


首先我建議對調(diào) Ctrl 鍵和 Caps-Lock 鍵的功能。


通過按下 Caps-Lock 鍵來代替 Ctrl 鍵將會非常實用。因為在編碼過程中,你需要頻繁地按下 Ctrl 鍵,而由于 Caps-Lock 與手指在鍵盤的起始位置處于同一直線,所以按下 Caps-Lock 鍵會更加容易、便捷。


其次,我建議將 Tmux 的快捷鍵前綴變?yōu)?Ctrl - a。用 Caps-Lock 鍵替代了 Ctrl 鍵之后,由于 Caps-Lock 鍵與 a 鍵離得更近,所以按下 Ctrl - a 就將會比按下 Ctrl - b 更容易、更便捷。


若要將快捷鍵前綴變更為 Ctrl-a ,請將以下配置加入到 Tmux 的配置文件 ~/.tmux.conf 中:


unbind C-b

set -g prefix C-a


Tmux 的配置文件


每當(dāng)開啟一個新的會話時,Tmux 都會先讀取 ~/.tmux.conf 這個文件。該文件中存放的就是對 Tmux 的配置。


小提示:如果你希望新的配置項能夠立即生效,那么你可以將下面這一行配置加入到文件 ~/.tmux.conf 中。


# bind a reload key

bind R source-file ~/.tmux.conf ; display-message 'Config reloaded..'


這樣配置了之后,每當(dāng)向 ~/.tmux.conf 文件中添加了新的配置,只需要按下 Ctrl-b r 就可以重新加載配置并使新的配置生效,從而免去了開啟一個新的會話。


Tmux 中最棒的功能


提示:下面這截圖也許與你使用 Tmux 時看到的界面略有不同。這是因為我修改了 Tmux 的狀態(tài)欄配置,如果你也想修改成和截圖中一樣的效果,那么可以參照“美化 Tmux 的狀態(tài)欄”這一節(jié)中的步驟。


窗格


我認為沿豎直方向分割屏幕是個不錯的主意,這樣我就可以在一邊使用 Vim,而在另一邊查看代碼運行結(jié)果,如果需要的話,有時我還會再打開一個控制臺。下面我就要講解如何利用 Tmux 實現(xiàn)這一切。



從圖中可以看出:


  • 左側(cè):Vim(左上方是一個 Ruby 的類文件,左下方是針對這類編寫的測試文件)

  • 右側(cè):一個 Bash 的會話

要創(chuàng)建一個豎直放置的窗格很容易,待開啟了一個 Tmux 會話之后,只需再按下 Ctrl-b % ,一個豎直窗格就出現(xiàn)了。另外,若要把屏幕沿水平方向分割,則只需要按下 Ctrl-b '。在 Tmux 的窗格間移動光標也很簡單,只需要先按下 Tmux 的快捷鍵前綴,然后再按下對應(yīng)的方向鍵就可以讓光標進入到目標窗格了。


窗口


在Tmux中,窗口是個窗格容器,你可以將多個窗格放置在窗口中,并根據(jù)你的實際需要在窗口中排列多個窗格,也是完全取決于你的需要。例如,我經(jīng)常是這樣做,先開啟一個叫作“server”的窗口用于運行應(yīng)用程序的服務(wù)器(在這個窗口中可以看到服務(wù)器的日志),然后開啟另一個叫作“editor”的窗口用于編寫代碼。在這個窗口中有兩個窗格,一個用于 Vim,一個用于運行測試代碼。最后再開啟一個叫作“shell”的窗口用于通過 Bash shell 運行命令。Tmux 的窗口功能非常實用,因為在一個窗口中可以創(chuàng)建出多個窗格,這樣在一個窗口中就能同時查看所有窗格內(nèi)容,通過這種方法可以高效地利用有限的屏幕空間。


在 Tmux 的會話中,現(xiàn)有的窗口將會列在屏幕下方。下圖所示的就是在默認情況下 Tmux 列出現(xiàn)有窗口的方式。這里一共有三個窗口,分別是“server”、“editor”和“shell”。



若要創(chuàng)建一個窗口,只需要按下Ctrl-b c;若要切換窗口,只需要先按下Ctrl-b,然后再按下想切換的窗口所對應(yīng)的數(shù)字,該數(shù)字會緊挨著窗口的名字顯示。


會話


一個 Tmux 會話中可以包含多個窗口。會話功能非常簡單易用,例如可以為一個特定的項目創(chuàng)建一個專用的 Tmux 會話。若要創(chuàng)建一個新的會話,只需要在終端運行如下的命令:


tmux new -s


假設(shè)我還需要開發(fā)另一個項目,于是我就會為此再新建一個會話。雖然進入了新的會話,但是原來的會話并沒有消失。所以我可以在稍后回到之前的會話繼續(xù)工作。若要創(chuàng)建一個新的會話,只需要按下 Ctrl-b : ,然后輸入如下的命令:


new -s


除非顯式地關(guān)閉會話,否則 Tmux 的會話在重啟計算機之前都不會消失。只要還沒有重啟計算機,你都可以自由地從一個項目的會話跳轉(zhuǎn)到另一個。


在 Tmux 的會話間切換


若要獲取現(xiàn)有會話的列表,可以按下Ctrl-b s。下圖所示的就是會話的列表:



列表中的每個會話都有一個 ID,該 ID 是從 0 開始的。按下對應(yīng)的 ID 就可以進入會話。如果你已經(jīng)創(chuàng)建了一個或多個會話,但是還沒有運行 Tmux,那么可以輸入如下命令以接入已開啟的會話。


tmux attach


在文本間快速移動光標,復(fù)制文本


在 iTerm2 中,要想快速地復(fù)制內(nèi)容就不得不鍵盤和鼠標一起用,這一點我一直很不喜歡。我想一定會有不需要使用鼠標且更快捷的復(fù)制方法。幸運的是,Tmux就提供了只用鍵盤就可以完成復(fù)制的功能,這源于 Tmux 是從命令行啟動的,而在命令行界面是無法使用鼠標的。


在文本間移動光標


在 Tmux 中可以使用與 Vim 極為相似的方式在文本間移動光標。正如你熟知的那樣,用 k 鍵可以將光標移動到上一行,用 w 鍵可以向后移動一個單詞等等。而且還可以通過把 Tmux 設(shè)為 vi 模式,使其與 Vim 的操作更加接近。為此,需要將以下配置加入到文件 ~/.tmux.conf 中。


# Use vim keybindings in copy mode

setw -g mode-keys vi


將復(fù)制下來的文本發(fā)送到系統(tǒng)的剪貼板中


在默認情況下,當(dāng)從 Tmux 中復(fù)制文本時,復(fù)制下來的文本只能粘貼到同一個 Tmux 會話中。若要使復(fù)制下來的文本可以粘貼到任何位置,就需要讓 Tmux 將文本復(fù)制到系統(tǒng)的剪貼板。為此,我們需要這樣做:


安裝 retach-to-user-namespace。用 brew 安裝的話將會非常簡單,只需要運行下面這條命令:


$ brew install reattach-to-user-namespace


在配置文件 ~/.tmux.conf 中加入以下內(nèi)容:


# invoke reattach-to-user-namespace every time a new window/pane opens

set-option -g default-command 'reattach-to-user-namespace -l bash'


Select and copy text


既然已經(jīng)設(shè)置成了 vi 模式,也安裝了 rettach-to-user-namespace,下面就讓我們來看看如何從 Tmux 的會話中復(fù)制文本吧。假設(shè)要復(fù)制的是 IP 地址,于是我們先運行了 ifconfig 命令。接下來就請跟隨以下的步驟:


首先按下 Ctrl-b [ 進入復(fù)制模式,然后可以看到一小段高亮的文本出現(xiàn)在了屏幕的右上角 (“[0/0]”)(如下圖所示)。



接下來就可以像在 Vim 中一樣用 j、k、l 和 h 等鍵在文本間移動光標了。


把光標移動到想復(fù)制的文本上后再按下空格鍵就可以開始選擇文本了(這和在 Vim 中復(fù)制文本的步驟一模一樣)。


選擇完要復(fù)制的文本后再按下回車鍵。


這樣 IP 地址就復(fù)制下來并可以粘貼到任何地方了。


讓復(fù)制文本的操作更像 Vim


你還可以設(shè)置 Tmux 使用 v 鍵選擇文本,用 y 鍵復(fù)制文本。為此只需要將下面的配置項加入到配置文件 ~/.tmux.conf 中。


# start selecting text typing 'v' key (once you are in copy mode)

bind-key -t vi-copy v begin-selection

# copy selected text to the system's clipboard

bind-key -t vi-copy y copy-pipe 'reattach-to-user-namespace pbcopy'


高效的結(jié)對編程


你可以將 Tmux 會話的地址分享給他人,這樣他們就可以通過 SSH 接入這個會話了。由于會話是建立在 SSH 之上的,所以不會產(chǎn)生額外的開銷。通過使用高速的互聯(lián)網(wǎng),對于那些連接到遠程會話上的用戶而言,他們會覺得這個會話就是運行在本地的。


在Tmux 中使用 Tmate

Tmate 是一個 Tmux 的管理工具,使用它不但能夠輕松地創(chuàng)建 Tmux 會話而且還能夠通過互聯(lián)網(wǎng)把該會話共享給其他人。若要使用 Tmate 共享 Tmux 會話,請按照以下步驟操作:


安裝 Homebrew


$ ruby -e '$(curl -fsSL https://raw./Homebrew/install/master/install)'


安裝 Tmate


$ brew update &&brew tap nviennot/tmate &&

brew install mate


使用 Tmate 開啟一個新的會話


$ tmate


從 Tmux 的會話中復(fù)制由 Tmate 產(chǎn)生的 SSH URL。如下圖所示,請注意屏幕下方的信息“[tmate] Remote session: ssh …”:


利用剛剛復(fù)制下來的 URL 就可以邀請其他人通過 SSH 訪問你的會話了。

了解了如何利用 Tmux 的結(jié)對編程功能之后,還可以再利用您所喜愛的運營商提供的語音服務(wù)進一步加強會話交互性。


調(diào)整 Tmux 以增強其同 Vim 的集成度


調(diào)整背景的配色方案


當(dāng)我第一次通過 Tmux 打開 Vim 時,我發(fā)現(xiàn) Vim 的顏色沒有正確顯示。正如下圖所示,只有有字符的地方才有背景色。



這個問題是因為通過 Tmux 運行 Vim 需要配置一個特殊的終端參數(shù)(term parameter)。請將下面這行配置添加以你的 ~/.vim 文件中。


if exists('$TMUX')

set term=screen-256color

endif


在更新了配置文件 ~/.vimrc 以后,顏色應(yīng)該就可以正確顯示了。



調(diào)整光標的形狀


在默認情況下,當(dāng)通過 Tmux 運行 Vim 時,無論當(dāng)前 Vim 是處于插入模式、可視模式還是其他模式,光標的形狀都是一樣的。這樣就很難判斷當(dāng)前的 Vim 模式是什么。若要避免這個問題,就需要讓 Tmux 通知 iTerm 更新光標的形狀。為此,需要將以下配置加入到文件 ~/.vimrc 中。


if exists('$ITERM_PROFILE')

if exists('$TMUX')

let &t_SI = '[3 q'

let &t_EI = '[0 q'

else

let &t_SI = ']50;CursorShape=1x7'

let &t_EI = ']50;CursorShape=0x7'

endif

end


在這里我要感謝 Andy Fowler,是他最先分享了調(diào)整光標的形狀這個技巧。


調(diào)整粘貼時的文本縮進


在 Vim 中粘貼文本時可能會遇到這樣的問題,有時文本的縮進會發(fā)生變化,特別是在粘貼大量的文本時,這個問題會更加明顯。雖然可以通過在粘貼前執(zhí)行 :set nopaste 來解決這個問題,但是這里還有一種更好的解決方法。就是把下面這段配置加入到配置文件 ~/.vimrc 中,這樣 Vim 就會自動地阻止粘貼文本時的自動縮進。


' for tmux to automatically set paste and nopaste mode at the time pasting (as

' happens in VIM UI)


function! WrapForTmux(s)

if !exists('$TMUX')

return a:s

endif


let tmux_start = 'Ptmux;'

let tmux_end = ''


return tmux_start . substitute(a:s, '', '', 'g') . tmux_end

endfunction


let &t_SI .= WrapForTmux('[?2004h')

let &t_EI .= WrapForTmux('[?2004l')


function! XTermPasteBegin()

set pastetoggle=[201~

set paste

return ''

endfunction


inoremap [200~ XTermPasteBegin()


在這里我要感謝 Marcin Kulik,是他最先分享了這個技巧。


其他能夠提升 Tmux 體驗的工具或技巧


Tmuxinator (為項目自動創(chuàng)建會話)


假設(shè)你正在開發(fā)應(yīng)用程序 A。在開發(fā)過程中,經(jīng)常要創(chuàng)建 Tmux 會話,會話中包含“server”、“editor”(用于編寫代碼)和“shell”(用于運行系統(tǒng)命令)這 3 個窗口。不僅如此,在一天之中的某個特定的時間你還需要臨時進入到應(yīng)用程序 B 的開發(fā)工作中。于是你又不得不創(chuàng)建另一個會話,雖然有略微的不同(比如目錄和某些命令),但是會話中還是要包含應(yīng)用程序 A 中的那 3 個窗口。但是有了 Tmuxinator,你就可以為每個Tmux 會話聲明一個配置,然后用 1 條命令就能創(chuàng)建出這個會話了。這功能太棒了,不是嗎。


Tmuxinator 是一個 Ruby 的 gem 包,可用于創(chuàng)建 Tmux 的會話。它的工作方式是先在配置文件中定義會話中的細節(jié),然后用 1 條命令創(chuàng)建出這些會話。下面就讓我們看看如何安裝 Tmuxinator 以及如何添加配置來為指定項目開啟一個會話??梢酝ㄟ^運行如下命令安裝 Tmuxinator 的 gem 包。


$ gem install tmuxinator


安裝好了 Tmuxinator 以后,就可以在系統(tǒng) Shell 中運行 tmuxinator 或 mux 命令了。下面就讓我們?yōu)樯鲜龅膽?yīng)用程序(有 3 個窗口,分別是“servers”, “editor” 和 “shell”)來創(chuàng)建一個配置文件吧。下面這條命令的作用是為這個項目創(chuàng)建并打開一個配置文件。


$ tmuxinator new project_a


按下回車鍵后,就會自動打開文件 ~/.tmuxinator/project_a.yml。為了實現(xiàn)項目 A 所需的配置,你需要把 project_a.yml 的內(nèi)容更新為:


name: project_a

root:


windows:

- server:


- editor:

layout: even-horizontal

panes:

- vim

-


- shell: ''


一旦將上面的配置添加到了項目 A 的 Yaml 文件中,只需要運行下面這條命令就可以啟動 Tmux 的會話了。


$ tmuxinator start project_a


當(dāng)然如果愿意的話,你也可以使用 Tmuxinator 命令的別名:


$ mux start project_a


大功告成了。現(xiàn)在,每當(dāng)想進入項目 A 的編碼工作時,就只需要運行 Tmuxinator 命令。


可以到這里查看Tmuxinator的官方文檔。


美化 Tmux 的狀態(tài)欄


默認情況下,Tmux的狀態(tài)欄看起來是下圖這個樣子(圖中綠底部分):



我們可以根據(jù)需要改變狀態(tài)欄的外觀。對我來說,我喜歡下圖這種清爽的外觀。



為了達到上圖的效果,我將如下的配置加入到了配置文件 ~/.tmux.conf 中。


# 狀態(tài)欄


# 顏色

set -g status-bg black

set -g status-fg white



# 對齊方式

set-option -g status-justify centre



# 左下角

set-option -g status-left '#[bg=black,fg=green][#[fg=cyan]#S#[fg=green]]'

set-option -g status-left-length 20



# 窗口列表

setw -g automatic-rename on

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]'



# 右下角

set -g status-right '#[fg=green][#[fg=cyan]%Y-%m-%d#[fg=green]]'

```


總結(jié)


在這篇文章中我們先介紹了 Tmux 的基本功能,然后介紹了 Tmux 中最棒的幾個功能。這之后介紹了一些配置以及幾個能夠提升 Tmux 體驗的工具。至此,諸位對 Tmux 的印象如何呢?你們是否也發(fā)現(xiàn)了什么其他有用的功能或配置?如果有的話歡迎留言告訴我們。


感謝您閱讀本文!


看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多人

關(guān)注「程序員的那些事」,提升編程技能

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    久久精品亚洲情色欧美| 欧美激情一区=区三区| 国产一区欧美午夜福利| 厕所偷拍一区二区三区视频| 欧美精品在线播放一区二区| 国产三级欧美三级日韩三级| 婷婷色网视频在线播放| 日韩免费成人福利在线| 日韩性生活视频免费在线观看| 日本本亚洲三级在线播放| 久久精品色妇熟妇丰满人妻91 | 国产成人精品午夜福利av免费| 日韩特级黄色大片在线观看| 91亚洲精品综合久久| 日本国产欧美精品视频| 偷拍美女洗澡免费视频| 国产成人精品一区二区在线看| 高清国产日韩欧美熟女| 午夜精品久久久免费视频| 国产毛片av一区二区三区小说| 日韩精品中文字幕在线视频| 粉嫩内射av一区二区| 国产一区二区三区av在线| 中文字幕亚洲视频一区二区| 欧美日韩亚洲国产av| 日本高清视频在线播放| 在线视频免费看你懂的| 亚洲另类女同一二三区| 免费观看一级欧美大片| 亚洲国产另类久久精品| 亚洲av首页免费在线观看| 亚洲精品成人综合色在线| 激情亚洲内射一区二区三区| 老富婆找帅哥按摩抠逼视频| 国产色偷丝袜麻豆亚洲| 天堂热东京热男人天堂| 高清一区二区三区不卡免费| 狠狠亚洲丁香综合久久| 激情五月综五月综合网| 国产毛片对白精品看片| 国产一区国产二区在线视频|