Vim 的十年
原文由 Matthias Endler 于 發布,訂閱此部落格
第一次不小心打開 Vim 時,我以為它壞掉了。我敲下的每個按鍵都讓畫面出現無法預期的變化,我只想復原並離開。不用說,那是一次很不愉快的體驗。不過,它身上有種說不出的特質,讓我一再回來,最後還成了我的主要編輯器。
十年一晃而過(!),我到現在還在用 Vim。嘗試過 Textmate、Atom、PhpStorm 等各種編輯器後,我發現自己待得最自在的地方依然是 Vim。大家總會問我:為什麼會這樣?
為什麼選擇 Vim?
在用 Vim 之前,我也用過不少其他編輯器,像 notepad 或 nano。它們的表現大致都符合預期:你輸入文字,用方向鍵或滑鼠移動游標,再按 Control + S 或透過選單列存檔。VI(以及它的精神續作 Vim)則完全不同。
在 Vim 裡,一切都不一樣,而這正是它如此高效的原因。讓我來解釋一下。
Vim 的禪
Vim 背後的哲學需要一點時間才能體會:當其他編輯器把寫作當成處理文字的核心時,Vim 認為核心是編輯。
你看,我大部分時間並不是在寫全新的文字,而是在編輯已有的文字。
我捏塑文字、形塑它、把它翻來覆去。寫作是一種工藝,也是一份苦工。你得用冰冷的雙手反覆雕琢自己的思緒,直到它們勉強拼湊成一個連貫的整體。這個痛苦的過程,正是 Vim 試圖讓它至少變得可以忍受的地方。它幫你保持掌控。而它的方法,就是提供你銳利、有效率的工具來修改文字。Vim 的核心,就是一套用來編輯文字的語言。
Vim,一門語言
Vim 的指令並不神祕,其實你早就知道了。
- 要 undo(復原),輸入
u。 - 要 find 下一個 t(找到下一個 t),輸入
ft。 - 要 delete a word(刪除一個單字),輸入
daw。 - 要 change a sentence(修改一個句子),輸入
cas。
很多時候,你只要想好想執行的操作和要套用的對象,就能猜到正確的指令。只要取每個單字的第一個字母就行了。試試看吧!如果出了什麼錯,隨時可以按 ESC 再輸入 u 來復原。
操作:delete, find, change, back, insert, append,…
對象:word, sentence, parentheses, (html) tag,…(參見 :help text-objects)
插入文字也只是另一種編輯操作,用 i 就能觸發。這就是為什麼預設情況下你會處於一般模式——也稱為命令模式——在這個模式下,所有這些操作都能運作。
一旦理解了這點,Vim 就變得合理多了,也從那時起你才會開始真正有生產力。
這些年來我的工作流程如何改變
剛入門時,我很好奇那些更有經驗的 Vim 使用者都是怎麼使用這個編輯器的。現在身為一個老手,我的答案是:沒有什麼祕訣。整天編輯文字後,我的確覺得比較沒那麼累了,但我常用的指令有 90% 都寫得在一張便利貼上。
話雖如此,這些年來我的 Vim 習慣還是改變了不少。
我經歷了幾個階段:
第一年:只要能輸入文字再成功離開就很開心了。
第二年:不錯喔,來多學幾個快捷鍵吧。
第三到五年:把所有功能都加進來!!!
第六到十年:我的 .vimrc 只有五行。
第三年時,我才真正開始探索 Vim 的生態系。我嘗試了各種不同的版本,像是 MacVim,以及像 janus 這樣的發行版。有一段時間,我甚至維護著自己的 Vim 設定檔,長度將近 400 行。
這些確實幫我了解了有哪些東西可以玩,但我不確定是否會推薦 Vim 新手也這麼做。畢竟,你其實並不需要那些。從最原生的 Vim 開始就已經很好用了!
我現在的 Vim 設定相當極簡。我已經不再使用外掛了,很大一部分是出於懶惰,也因為 Vim 內建的指令或巨集就能取代它們。
以下是這些年來我的工作流程改變的三個具體例子:
一開始,我很常用「數字驅動的移動」。也就是說,如果你有一個像
b這樣可以往回一個單字的指令,你也可以輸入5b來一次往回五個單字。現在我大多改用/去搜尋並跳到符合的單字,因為這樣更快。我已經不再用方向鍵在文字中移動,而是強迫自己使用
h、j、k、l。很多人說這樣更快。嘗試了幾年之後,我覺得並非如此(至少對我而言)。現在只是出於習慣才繼續這樣用。在我的主要工作電腦上,我用 Vim 來快速編輯文字,用 Visual Studio Code 加上超棒的 Vim 外掛來處理專案。這樣就能兩者兼得。
我至今仍在苦手的問題
這麼多年過去了,我依然稱不上 Vim 大師——還差得遠呢。就像其他 Vim 使用者會告訴你的那樣,我們都還在學習中。
以下是有幾件我希望自己能做得更好的事:
- 在長文中跳轉:我已經會一些基本操作,像是搜尋(
/)、跳到對應的括號(%)或跳到指定行數(例如要跳到第 10 行,就輸入10G),但我其實還可以更常利用符號來導航。 - 用視覺模式搬移文字:有時候要打出正確的字母組合來剪下(刪除)想搬移的文字,還滿複雜的。這時就是視覺模式(
v)發揮作用的時候。它會把選取的文字標示起來。我應該更常使用它。 - 用多個暫存器來複製貼上:現在我複製文字時只用一個暫存器(就像一個剪貼簿),但 Vim 其實支援多個暫存器。如果你想同時搬移多段不同的內容,這就很方便了。來多用一點吧!
- 分頁:我知道分頁是怎麼運作的,但打起來總覺得很卡手。所以我從來沒有大量使用它。相反地,我大多是用多個終端機分頁,或是用支援 Vim 按鍵綁定的 IDE 來處理較大的專案。
我還會再學一次 Vim 嗎?
這是個很難回答的問題。
一方面,我會說不會。Vim 的學習曲線很陡,而且看到現代的 IDE 越來越懂得理解使用者的意圖,整體來說編輯文字已經變得容易、快速許多。
另一方面,Vim 對我來說仍是最快寫下想法和程式碼的方式。更棒的是,它在每台電腦上都能跑,而且很可能在未來幾十年都還會存在。相比之下,我不知道 IntelliJ 的快捷鍵在十年後是否還會有用(註:如果你是在未來讀到這篇文章,並問自己「什麼是 IntelliJ?」,答案可能是「已經沒人在用了」)。
總結
如果只能給你一個建議,那就是:別靠死背指令來學 Vim。相反地,先看看你目前的工作流程,試著把它變得更好,再去想 Vim 怎麼讓這件事更輕鬆。看看別人是怎麼使用 Vim 的也很有幫助,可以帶來不少靈感(Youtube 連結,有聲音)。
你會花很多時間在寫文字上,所以花時間把一個編輯器學好是非常值得的投資——尤其是當你是一名程式設計師的時候。
十年過去,Vim 已經深深烙印在我的腦海裡。我在編輯文字時,腦中想的就是 Vim。它對我而言已經成了另一種自然語言。我很期待下一個十年。
隨機一篇部落格
留言
登入後參與討論