我爲什麼說 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