2021-05-12 14:32:11
用 Tmux 和 Vim 打造 IDE
我的一個朋友在參觀一個辦公室時發現其雇員都在使用 tmux 和 vim 工具來開發 Ruby 專案。他很好奇為什麼人們寧可放棄滑鼠輸入的便利而選擇使用控制台版本的 vim 進行工作。
最終我發現這個是一個非常好的工作方式。起初使用控制台 vim 強迫我去正確地學習 vim 快捷鍵(motion commands)。結合盲打後,vim 提供了在多檔案以及多程式碼行跳轉的強大指令,這無疑比使用滑鼠更加高效。
我習慣於將終端工具與程式碼編輯器平鋪在一起。在 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,對於重度依賴鍵盤的操作一定要思考是否有相關的快捷鍵。舉個例子,當我第一次使用 ~ 快捷鍵時(用於大小寫轉換),我覺得“這個真是搞笑了,我肯定再不會使用它”。哈,實際上在我寫這篇文章時,我已經使用三次了。
我之後找到了使用快捷鍵的竅門,因為我注意到一些有經驗的 vim 使用者都在盡可能地避免使用編輯模式(insert mode)。因此一定要多看看 vim 的幫助手冊,之後你就會發現居然有這麼多好方法可以改進你的編輯技能。
tmux 1.8 發布,Linux 終端複用器 http://www.linuxidc.com/Linux/2013-03/81980.htm
Tmux:終端複用器 http://www.linuxidc.com/Linux/2013-07/86776.htm
tmux使用簡單教學 http://www.linuxidc.com/Linux/2014-10/107644.htm
CentOS下Tmux安裝和使用 http://www.linuxidc.com/Linux/2014-11/109375.htm
相關文章