我爲什麼說 Vim 比 VSCode 更好用

作者 | Sean

譯者 | 王強

策劃 | 冬梅

Github 被微軟收購後迎來了一個相當重要的功能更新,叫做 Codespaces。

有了它,你就可以直接在你的倉庫裏寫代碼,而用不着在自己的電腦上本地編程了。你可以通過瀏覽器來操控一臺運行 VSCode 的超快服務器來運行代碼、提供服務和更新代碼。

Vim 曾經是可移植性最強的文本編輯器,因爲你可以在幾乎所有的服務器機器上找到它,並通過 SSH 在終端使用它。

現在,VSCode 也有了一些這樣的功能。

你不僅可以在 Github 中運行 VSCode,而且微軟還提供了一個可以自服務的 VSCode 版本,叫做 Open VSCode Server。你可以用它將 VSCode 安裝到一臺服務器上,並在你想要的任何端口上爲應用提供服務。然後你可以在自己的瀏覽器中訪問服務器地址,並以和 Codespaces 中一樣的操作來使用 VSCode,但卻是免費的。

微軟走向開源世界

微軟的 xterm.js(用於 VSCode 自己的終端)是作爲微軟自己獨有的開源項目發佈的,它萌生了一大堆各種各樣基於瀏覽器的終端;現在你在幾乎每一個服務器託管網站上都能找到一個終端。

這家公司曾長期反對開源模式,但如今他們已經擁抱了開源世界。在 Web 開發領域,他們正在佔據主導地位。微軟擁有 Ubuntu、Github、npmjs.com,我很少能見到不用 VSCode 的開發者。

當他們開始讓 VSCode 也變得有這麼強的可移植性之後,甚至我自己也開始嘗試 Open VSCode 了。我想看看自己是否喜歡遠程寫代碼的感覺,能不能體會到它那不怎麼清爽的 GUI 的優點。

在我每月租金 5 英鎊的廉價服務器上運行二進制文件後,它幾乎立即崩潰了,我只能重新啓動。

Vim 還是更勝一籌

Vim 比任何 GUI 編輯器都更有優勢,原因是顯而易見的。它輕巧快速,你可以在服務器上通過 SSH 寫代碼,所有事情都可以在終端中完成。它的應用非常廣泛,可移植性和可配置性極佳。

這些原因你可能都已經聽過了,所以我想談談我喜歡它的一些個人理由,以及一些 VSCode 可能更擅長的領域。

它很難用?

當我剛開始就提到 Vim 很難用時,“麻瓜們” 就都被拒之門外了——我是在開玩笑。

實際上,學習 Vim 比學習樂器要容易得多,但很多人都能學會演奏樂器;它也比學習閱讀和寫作容易得多,後者是一件非常困難的事情,但幾乎每個人都能做到。

用起來比較難當然不應該成爲阻擋程序員使用的障礙。學習各種各樣困難的東西就是我們的安身立命之本。

學習比較困難的東西是有一些好處的,但這些好處與你學習的這件事本身並無直接聯繫。你在這一過程中可以獲得一些元技能。

我的兒子尤里最近學會了騎自行車,這對他來說很困難,因爲騎自行車不是你可以一點點學會的東西。學習騎車時會有一個類似於信仰之躍的時刻,你還沒在心理上做好準備的時候就必須在行動上嘗試,並冒着從車上摔下來的風險。

還有一件事也讓自行車學起來更難:在你學會騎自行車之前,自行車對你來說毫無用處。所以他之前喜歡踩着滑板車到處走,因爲滑板車學起來容易得多,學習過程也更有趣。

但自從尤里學會騎自行車後就再也沒碰過他的滑板車,因爲它太慢了,而且沒什麼樂趣。雖然他沒有意識到,但學車的過程中其實也學到了一些元經驗。

首先,有時學習一些東西需要來一次信仰之躍,你必須冒着風險來邁出那一步。還有,有些東西在你學會之前毫無用處...... 然後突然間它們就變得如此迷人了。

VSCode 就像是文本編輯器中的滑板車一樣,而 Vim 則是自行車。

Vim 不是異步的

爲什麼這是個優勢?嗯,這就是它如此之快的原因所在。Vim 只有大約 7MB 的空間佔用,並且同時只會做一件事。

它不會掃描你的目錄來尋找函數定義,它不會穿越語法樹給你提供複雜的自動完成建議,它不會計算你光標的上下文並向文檔 API 發出請求,它不會對每一行代碼做 git blame,它不會自動下載每個文件的語法。

但是 Vim 可以做所有這些事情...... 只要你讓它做就行。

它只做你讓它做的事

有些人喜歡自動功能,因爲誰都希望自己的生活變得更容易。或者,也許你沒有時間或精力來處理這些小事情。

我想這取決於你覺得你對自己工作水平的感受,你是否有精力使用終端命令來 lint 你的文件,或閱讀: help 來找出配置你的. vimrc 文件的方法(我開始使用 Vim 時從未使用: help,一開始互聯網資源絕對是你的好朋友)。

但說實話,我認識的很多人會用不那麼有趣的方式來浪費他們的時間,比如漫無目的地刷 facebook,或者在 Netflix 上重新看幾集老友記之類。

有時我想做一些比較有互動性的事情,而不是從頭到尾都在寫代碼。如果我下班後或週末累了,過去我會玩音樂或電腦遊戲;現在我會在家裏修一些東西,或者用 Vim 做些修修補補。

我會思考一些可以在 Vimscript 中寫出來的小功能,或整合一個有用的命令行工具,甚至只是閱讀一些我從未見過的: help…… 總之讓我有事情可做就行,不是什麼我必須完成的任務,但也不完全是浪費時間。

Vim 讓代碼寫起來就像打遊戲一樣

我深入瞭解 Vim 後就徹底不再玩電腦遊戲了,這是因爲它的控制方式簡直就像遊戲一樣。Vim 有一個模塊化的結構,允許你使用各種命令的組合操作。這很像是你在格鬥遊戲中進行連擊的方式。

大多數命令有兩個、三個或四個部分。三部分結構的一個版本是這樣的:操作符(operator)- 文本對象(text object)- 動作(motion)。

操作符包括刪除(delete)、更改(change)、視覺選擇(visual select)和替換(replace),每次選一個使用。

文本對象要麼在內部(inside)要麼在周圍(around)。

動作有很多種,我們稍後會具體討論,現在我們可以把動作看作是命令的一種目標。舉個例子,我可以按 dib,意思是在塊內刪除(delete inside block)。

其中操作符是 delete,文本對象是 inside,動作是 block。這樣就可以刪除一個(括號)塊內的所有內容。

可選的組合數量很多:

di'——刪除(delete)“單引號” 內(inside)的內容。

da"——刪除 “雙引號” 周圍(around)的內容。

dit——刪除 html 標籤(tag)內的內容。

ci[——改變(change)[方括號] 內的內容。

正如我前面所說的,可供選擇的動作命令有很多,它們的表現也各不相同,具體取決於你是在三部分組合中使用(如上所述),還是在兩部分組合中使用(這時去掉文本對象,讓命令從光標位置向後運行)。

下面是你可以在上述三段式組合中使用的一些相關動作的清單。
--------------------------------------------------
| motions                           | key        |
|-----------------------------------|------------|
| word                              | w          |
| WORD (includes special chars)     | W          |
| block (of parentheses)            | b or (     |
| BLOCK (of curly braces)           | B or {     |
| brackets                          | [          |
| single quotes                     | '          |
| double quotes                     | "          |
| tag (html or xml <tag></tag>)     | t          |
| paragraph                         | p          |
| sentence                          | s          |
--------------------------------------------------

這些命令可以讓你快速而輕鬆地改變一個函數的參數、一個字符串的內容或一個 if 塊的內容。一旦你學會了這些命令,在哪裏你都會想用一用。

其他文本編輯器都會讓人感到繁瑣和笨重,你會在每一個你能找到的環境中安裝 “Vim 模式”。

關於動作的更多信息

動作是你在 Vim 中使用最多的按鍵命令類型,因爲它們可以單獨用來移動光標。有些動作可以單獨使用,而有些動作只有在作爲組合的一部分使用時才能發揮作用。

例如,w(forword)鍵會將光標一次向前跳過一個單詞,但'單引號不是一個單獨的動作,它的作用完全是另一回事。

有些動作會變成不同的類型,取決於它們是組合使用還是單獨使用。例如,在上面的三段式組合中,b 鍵的意思是塊,但當你單獨使用它時,它的意思是返回(back),並且每次向後移動光標一個單詞。

Vim 的命令是上下文感知的,也是模塊化的。不同的鍵意味着不同的操作,這取決於你何時使用它們以及光標位於何處。

它很像一種語言,你可以把這些命令看成一個句子:刪除這些'單引號'內的內容(delete inside these ‘single quote’。

原文鏈接

https://sean-warman.medium.com/why-vim-is-better-than-vscode-d09e2355eb37

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/22Uu1EYZxN5iECnDMCnpfg