在Linux系統中tmux 和 vim兩個工具可以用來開發項目,很多人寧願使用tmux 和 vim 也不用鍵盤和鼠標說明這兩個工具有著獨到之處。本文就來介紹一下在Linux系統中把tmux和vim打造成IDE。
很多人習慣於將終端工具與代碼編輯器平鋪在一起。在 web 開發工作通常需要一個控制台用於輸入 ad-hoc 命令,一個控制台操作數據庫,以及一個控制台查看日志。同時我的一些項目還會使用測試工具來對有修訂的文件進行自動化測試,因此我也希望同時能看到這些測 試執行的狀態。
vim 提供了很多插件可以將上述功能集成在一起,但我更喜歡 vim/tmux 這個組合。這是個可視化的操作工具。
通用這種方式使用命令行工具,我們可以高效地打造一個輕量級、可定制化 IDE 。我還發現在 tmux 的多個控制台窗格(pane)中輸入 Unix 命令的方式很好用,因為這種方式可以很容易地將命令結合起來從而提供復雜的腳本化操作,而不需要臃腫的IDE工具。
這種使用方法與使用傳統的IDE的區別在於其提供的界面非常契合我當下的工作,且它僅受限於我所安裝命令行工具以及腳本語言。我可以按需創建 tmux 窗格(pane)以及 vim 分割(split)窗口,而不要開發什麼模板。盡管 Eclipse 和 Xocde 有提供一些以任務為中心( task-foruce) 的界面,我還是覺得這些有些礙事。尤其是 Xcode,它所提供的快捷鍵感覺像是後面才補上去的,我還是得不停地使用鼠標進行操作。
支持任務間快速切換則是另一個優點。我是一個自由職業者,通常一天中我需要在 3、4 個項目間進行切換。在使用 tmux 之後, 我可以先斷開(detach)一個會話稍後再切回來繼續,這使我能夠專注於當前工作。我覺得這個是控制台 vim 工具相比於 GUI vim 或是同時開一堆控制台工作而言的一個極大優勢,因為 Eclipse 以及 Xcode 總是在關閉工程時嘗試保存界面狀態(不過最新的版本的 Xcode 在關閉工程貌似總是將我打開的分割窗口關閉掉)。
為什麼使用 hjkl 鍵
這種操作方式看起來可能很別扭,不過如果你能夠熟練地盲打,vim 和 tmux (配置成 vim 鍵風格)可以很容易讓手指遠離鼠標而只保持在鍵盤主鍵區(home row)進行操作。(譯者注:home row 指的是鍵盤上的 “A、S、D、F、J、K、L、;” 這 8 個按鍵。)
這正是 hjkl 鍵的秘密:對於哪些盲打正確率高的人而言。 對於那些不習慣使用這些按鍵的人,可以先慢慢嘗試幾天。並先專注於打字的正確性,充分利用好你的十個手指。
使用 hjkl 鍵的道理讓我想起說服游戲初學者去使用 wasd 鍵而不使用方向鍵情況。 起初 wasd 的確會覺得不太直觀,但這使得同時使用鍵盤以及鼠標操作變得更加容易。當適應這種操作方式之後,其優點是顯而易見的。
配置提示
在 ~/.tmux.conf 文件中做如下的配置:
set-window-option -g mode-keys vi
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
這個能讓我在 tmux 中使用 vim 的快捷鍵。
如果你正在努力掌握 vim 的快捷鍵,請在 vim 的編輯模式下關閉方向鍵,具體可以參考:Vim: Making those Arrow Keys Work With You 。
如果你是個 vim 新手,這裡值得一提的是 vim 支持 ctags。同時還有 TagHighlight 插件可以在 pane 中動態地顯示當前文件編輯緩存區的多個標簽(tags),這是個類似於 IDE 的功能。
Dotfiles文件
你的 IDE 配置文件是否能夠在多台電腦間同步?
我有一個名為 dotfiles 的私個 git 庫,專門用於存儲 vim 和 ctags 配置以及插件。我寫了一個安裝腳本用於自動為本地 dotfiles 庫創建配置文件的符號鏈接。一旦我使用一台新電腦時,我首先做的是檢出(check out)這個 git 庫。之後當我再開項目進行編輯時,vim 和 tmux 就已按我習慣的使用方式配置好了。
拷貝與粘貼
我經常需要使用 tmux 的拷貝與粘貼命令將控制台的輸出拷貝到 vim 中。基於 tmux 的不同配置,快捷鍵有很大差異,因此非常值得去閱讀一下 tmux 的手冊並了解其工作原理。默認是使用 “ctrl-b [“ 進入拷貝模式,使用空格鍵(space)開始內容選取,回車鍵(Enter)進行拷貝,然後使用 ”ctrl-b ]” 進行粘貼。
快捷鍵
如果想要高效地使用 vim,對於重度依賴鍵盤的操作一定要思考是否有相關的快捷鍵。舉個例子,當我第一次使用 ~ 快捷鍵時(用於大小寫轉換),我覺得“這個真是搞笑了,我肯定再不會使用它”。哈,實際上在我寫這篇文章時,我已經使用三次了。
以上就是在Linux系統中把tmux和vim打造成IDE的教程了,因為tmux和vim有很多快捷鍵,所以完全可以取代鼠標的作用。