【CSDN 編者按】 本文 講述了一位程式設計師從初次接觸到最終精通 Vim 編輯器的心路歷程。16歲時,作者因一段視訊中展示的高效編碼方式而對 Vim 產生了興趣,但由於 Vim 的學習曲線陡峭,初次嘗試便以失敗告終。五年後,作為一名專業軟體工程師,作者再次受到 Vim 的吸引,決定嘗試 Neovim,一個基於 Vim 的增強版本,但仍然因不適應而放棄。
原文連結: https://emanuelcepoi.com/preview/66785dd2d3170dd0332a47d9
本文為 CSDN 組織編譯,未經授權禁止轉載。
作者 |
Emanuel Cepoi
譯者 | 彎月
出品 | CSDN(ID:CSDNnews)
16歲的時候,我觀看了一段視訊。螢幕上是一個終端畫面,光標來回跳躍,卻總是精準地落到需要的位置,而滑鼠根本沒用到。
我非常驚訝。我從未見過有人透過終端視窗編寫程式碼,作為一個 VS Code 使用者,我寫程式碼的速度從來沒有那麽快。在那一刻,我知道我必須試試看視訊作者使用的工具。我渴望自己也能達到那種酷炫的水平,但沒想到我花費了六年之久才做到了。
四處打聽之後,我才了解到視訊作者使用的是vim。他使用的是純vim,零外掛程式,甚至連 LSP 都不用。深入挖掘下去,我偶然發現了「Unix即IDE」的概念,我被吸引住了。
這就是我的 vim 之旅的開始。
初次接觸
我上網搜尋了一番如何安裝vim,卻發現我的機器已經預裝了。於是,我滿懷激動地在終端上執行了 「vim」。
但幾秒鐘後,我發現一切都很奇怪。我不知道如何透過鍵盤輸入,也不知道如何開啟檔,什麽都做不了。
沮喪湧上心頭,我決定關閉終端。然而,我甚至不知道如何關閉。最終,我不得不上網搜尋 「如何關閉 VIM」。令我驚訝的是,StackOverflow 上關於這個問題的瀏覽次數高達幾百萬。至少我不是唯一一個感到困惑的人。
我繼續搜尋,然後發現了 vimtutor。於是,我嘗試了 vimtutor,事前逐漸有了眉目。我可以輸入一些內容,並使用 hjkl 移動光標了。
我花了不到一天的時間粗略學習了一下vimtutor。盡管仍然感到困惑,但我相信透過練習,我會變得更好。記住這些按鍵組合很難,hjkl 使用起來感覺也很奇怪。不同的插入模式令我很不解,什麽時候應該按 "i",什麽時候應該按"I"?為什麽刪除會覆蓋我的剪貼簿?如何更高效地跳轉?我的速度非常慢,這令我很厭煩,我希望加快速度。
第二天,我再次嘗試,卻發現前一天學到的知識幾乎都不記得了,沮喪之余,我又過了一遍vimtutor。但我依然很樂觀,堅持下去,我一定能掌握vim——至少大家都是這麽說的。
但目前,我選擇暫時擱置。
第二次機會
5年後,我成為了一名專業的軟體工程師,我所鐘愛的寫程式碼已成為我的職業。每天我都會寫程式碼,而且是 IntelliJ 的超級粉絲。我所有的工作都依賴IntelliJ:前端開發、移動開發和後端開發(不是 Java)。這款工具非常棒。而我的生活也順風順水。
然而,我總感覺缺了些什麽。寫程式碼時,我依然使用滑鼠,而且我也沒有成為酷炫的 vim 使用者俱樂部的一員。雖然我略懂一點 vim,偶爾可以在伺服器上編輯檔,但還不足以取代 IntelliJ,也不足以炫耀「我會用 vim」。
再次嘗試vim的想法一直在我腦海中徘徊,但五年前那段難忘的經歷仍然困擾著我。
偶然間,我在觀看一段直播時註意到作者也在使用vim,這讓我想起多年前自己也曾嘗試。看著他輕松地在程式碼間跳轉,並使用各種瘋狂的快捷鍵,我意識到他是一個真正的 vim 愛好者。
我看到了希望,感覺自己也能行。
於是,我決定嘗試 Neovim。上網搜尋了一番,我發現這是一個改進版,支持 Lua。雖然我不懂 Lua,但乍一看似乎比 VimScript 更容易。
這次,我決定聰明一點,使用預配置的選項,因為自己寫配置似乎仍然不可能。我下載了 https://astronvim.com/,並試了一下。
我擁有了一個功能齊全的 Neovim 配置。我有一個檔樹,可以搜尋內容,開啟檔,而且還能導航,盡管很勉強。我感覺自己在進步,不是嗎?
我試著在工作中使用這款工具,卻發現簡直不可能。與 IntelliJ 相比,Neovim 的設定感覺很奇怪。重構功能在哪裏?如何更快地搜尋檔?如何只搜尋最近開啟的檔?如何重新命名檔?為什麽自動匯入不起作用?還有,為什麽 hjkl 這麽煩人?為什麽我總是記不住這些按鍵?
我再一次倍感沮喪。我只是想做好自己的工作,但根本不行。我太慢了,我不能占用大量工作時間來嘗試這個工具,而且astronvim的設定感覺非常臃腫。
於是,我又放棄了。
最後一次機會
兩周後,我註意到越來越多的主播在使用 Neovim。雖然我還未能掌握這項炫酷的技術,但我有了再次嘗試的動力。
這一次,我決定動動腦子。我不打算使用Astronvim之類的發行版。我在網上搜尋了一下,了解到我可以在 IntelliJ 中使用 Vim 鍵繫結。IdeaVim 拯救了我。
這真是個好訊息。我不僅可以擁有IntelliJ 所有優秀的功能,同時還能使用 Vim 在程式碼中跳轉。
我記得,使用vim的大部份挫敗感都來自我沒有掌握基本的操作,比如 gtd(轉到定義)、gtr(轉到參照)、尋找所有參照以及全域重新命名等。使用帶有 Vim 鍵繫結的 IntelliJ 是一個很好的思路,我可以使用IntelliJ處理所有 LSP 任務,同時使用Vim快速導航程式碼。
就這樣,我完成了部份切換。
結合使用IntelliJ和vim操作的第一天,我的工作速度非常慢,一切仍然令人沮喪,但我知道這是暫時的。磕磕絆絆地度過了第一天,在 IntelliJ 中使用vim確實幫助很大。
第二天,我開始適應了。我掌握了hjkl 的用法了,不再混淆。我在進步,並且有動力繼續下去。
我堅持了整整一周。
全面切換
大約在 IntelliJ 中使用 Vim 兩個月後,我的速度明顯提升了。我可以迅速地導航程式碼,有時IntelliJ甚至跟不上我的節奏(可能是因為它是用 Java 寫的)。
我已經熟練掌握了垂直移動和水平移動,在引號和括弧內跳轉。我發現了 F 和 T 操作,而且我會在每個應用程式中尋找 "Vim 模式"。十六歲的我一定會為現在的自己感到驕傲。
但我仍然不是酷炫的 vim 使用者俱樂部的一員。所以我決定再給 raw nvim 一次機會,但這次我準備聰明一點。
我記得以前自己很討厭復雜的 astronvim 文件,不喜歡在這些文件中尋找快捷鍵。所以,我決定自己動手編寫 nvim 配置。
我想深入了解我的整個配置,並掌握所有細節,所以我花了一個周末學習了 Lua。
在掌握Lua後,nvim似乎也變得合理起來,我的第一個 nvim 配置逐漸成形。
我擁有了自己的LSP,我的第一個自訂取消了每次按鍵都會彈出的討厭的自動補齊視窗。但在有需要時,我只需按下command+空格鍵就能看到自動補齊視窗。
我配置了 Telescope,可輕松尋找我需要的內容,還設定了漂亮的 Gruvbox 主題。
我學習了宏、寄存器和快速修復列表。我終於明白按刪除鍵時復制的文本去了哪裏。我可以修改整個程式碼庫中的任何一段程式碼,並透過終端完成所有操作。美好的生活又回來了。於是,我用一個非常簡約的 nvim 設定換掉了IntelliJ。
我解除安裝了 IntelliJ 並取消了訂閱。
我終於成為了酷炫的 vim 使用者俱樂部的一員,我終於可以說「我使用的是Vim」。
現狀
時隔一年,如今的我每天都在使用nvim。我感覺自己的工作速度比以前更快。我的打字速度可以名列全球前 0.1%:每分鐘 200 個單詞。如此之快的打字速度與 vim 操作結合起來,快得令人難以置信,比我認識的任何人都快。
我會抓住每一個機會炫耀自己使用 vim,並試圖說服其他人加入 vim 革命。
我終於明白為什麽那些高手不使用任何外掛程式。我自己也開始使用 tmux,並加入「Unix即IDE」運動。
坦白說,我認為學習 vim 是我一生中最好的選擇之一。其次便是接受「Unix即IDE」的理念。
推薦閱讀: