發表日期 2/24/2022, 1:35:08 PM
作者 | 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)[方括號] 內的內容。
正如我前麵所說的,可供選擇的動作命令有很多,它們的錶現也各不相同,具體取決於你是在三部分組閤中使用(如上所述),還是在兩部分組閤中使用(這時去掉文本對象,讓命令從光標位置嚮後運行)。
這些命令可以讓你快速而輕鬆地改變一個函數的參數、一個字符串的內容或一個 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