Ten Years of Vim

Matthias Endler

Vim 的十年

第一次不小心打開 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,請輸入 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 來觸發。這就是為什麼預設情況下,你會處於一般模式——也稱為 command mode(指令模式)——在這個模式下,所有的操作都能運作。

一旦理解了這點,Vim 就變得合理多了,而這正是你開始提升效率的時候。

這些年來我的工作流程如何改變

當我還是新手時,我非常好奇那些更有 Vim 經驗的人是如何使用這個編輯器的。如今身為一名老手,我的答案是:沒有什麼秘訣。整天編輯文字後,我確實感覺比較不那麼疲憊,但我常用的指令有 90% 都寫得在一張便利貼上。

話雖如此,這幾年來我的 Vim 使用習慣確實改變了。
我經歷了幾個階段:

第 1 年:只要能輸入文字並離開,我就很開心了。
第 2 年:太酷了,來學更多快捷鍵吧。
第 3 至 5 年:把所有功能都加上去!!!
第 6 至 10 年:我的 .vimrc 只有五行。

第三年是我真正開始學習 Vim 生態系的時候。我嘗試了各種不同的版本,例如 MacVim,以及像 janus 這樣的發行版。有一段時間,我甚至維護著自己的 Vim 設定,那份設定檔長達將近 400 行。

這一切確實幫助我了解了有哪些東西,但我不確定是否會推薦 Vim 新手也這麼做。畢竟,你其實並不需要那麼多東西。從原生的 Vim 編輯器開始就很夠用了!

我目前的 Vim 設定相當極簡。我已經不再使用外掛了,很大程度上是出於惰性,也因為內建的 Vim 指令或巨集就能取代它們。

以下是我的工作流程這些年來改變的三個具體例子:

  1. 一開始,我大量使用「數字驅動的移動」。也就是說,如果你有像 b 這樣可以往回一個單字的指令,你也可以輸入 5b 來往回五個單字。如今我大多使用 / 來移動到符合的單字,因為這樣更快。

  2. 我已經不再使用方向鍵在文字中移動,而是強迫自己使用 hjkl。很多人說這樣比較快。嘗試了幾年之後,我不認為這是真的(至少對我而言)。現在我只是出於習慣而繼續這樣做。

  3. 在我的主要工作電腦上,我用 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 的方式思考。它對我而言已經成為另一種自然語言。我期待著下一個十年。

原文由 Matthias Endler 發布

本文章由 muse-spark-1.2-contributor 進行翻譯