Vim 的哲學(一)

就在幾個小時之前,我回答了一個關於推薦開發工具的問題,不少朋友表示喜歡和鼓勵,很是感謝!我也很想多寫一些細節,因而便起意開一個系列來聊聊我屢次提到的 Vim。html

這將是一個 Vim 的教學性質的系列,可是和絕大多數同類教程不一樣的是,個人重點不在於技巧的傳授,而是在於對其觀念的理解和闡述。Vim 之因此能卓爾不羣靠地就是一種自成一派且精悍有效的「編輯器哲學」(固然 Emacs 也是),就好像網遊千千萬卻惟有 World of Warcraft 一覽衆山小,那靠地不是技巧與外在,而是不同凡響的世界觀。這個世界和這個時代,不少東西都能博人眼球,使人叫絕,但惟有那些體現出獨特價值觀的人或事物才能在人們內心留下難以磨滅的印記。vim

如何學習 Vim?

我首先來說講宏觀上的心得體會:如何學習 Vim?這個問題的背後其實隱含着不少訴求,好比:segmentfault

  • 我很懶,不想看厚厚的文檔,不想學習無窮無盡的命令、腳本、配置選項……我就想要可以快速上手,在最短期裏成爲高手。
  • 我很笨,我根本記不住那麼多的模式和命令組合,我也永遠沒法適應古怪的功能鍵位,我只想「所見即所得」,點點鼠標就能夠完成全部的操做。
  • 我很煩,我要這要那,我要 debugger,我要 refactor,我要 auto-complete……一句話,我要 Out of box!(開箱即用,應有盡有)可是,誰能告訴我怎麼自定義代碼匹配的片段啊?誰能告訴我怎麼定義語法檢查的範圍啊?誰能告訴我怎麼換字體和顏色主題啊?
  • ……等等

我理解,我都能理解。如今我不會批判,將來我會逐一解答,請稍安勿躁。其實在我身上發生的故事就頗有表明性,從我接觸 Vim 到如今足足超過兩年時間,在此期間我無數次鼓起勇氣想要征服這個巨獸,卻也一樣屢次的短短几天就敗下陣來(使人欣慰的是這些打擊卻是讓我從新認識了許多別的編輯器);也試圖偷懶直接使用其餘人的 .vimrc 或者集成安裝包,但每次都是好景不長,一旦遇到想要微調的時候就抓狂不已了……編輯器

說真的我不止一次想過,或許我一生都無法真正學會 Vim,可是心裏坦白地說:我對本身很失望。工具

我不想把這篇文字變水,因此心裏獨白就省略了。真正的關鍵在於一年半之後,也就是距今半年之前,一我的改變了我對於學習 Vim 這件事情的態度,或者說他刺激了我讓我有了新的動力和方法,我爲本身制定了計劃並依次施行,終於成功地征服了它。學習

征服,不是指我無敵了,而是說我對這個工具已經沒有任何使用障礙了,即便我還有不少不了解的東西,我也知道如何去應對和掌握它們,剩下的只是時間問題。征服實際上是一種領悟,我融入了 Vim 的哲學而已。開發工具

我之因此要說這些就是想告訴大家,學習 Vim 並不困難,不須要你多麼天才,也不須要你多麼努力。你只須要一個想要用它的意願和一條忠懇的建議——也就是那我的教會個人:保持簡單(Keep it simple enough)。測試

這就是所有的祕訣。惟一阻礙你學會 Vim 的緣由就是你老是把它想的太複雜,因此從一開始請放輕鬆,接下來我會與你分享幾乎全部的細節,你必定不會讓本身感到失望的!字體

另外,爲了客觀證實我不是吹牛逼(好比抄別人的教學帖子來博名望),也爲了給你樹立一點信心(個人確知道如何學好 Vim),貼上我剛完成的 Smaterer 測驗分數spa

Vim Score

其實這個測試不算最難的,滿分 800,很遺憾我就差一步到 Master 級別,不過我已經很高興了。半年而已,我沒有白費功夫(並且不是每天像讀書考試那樣的學,很輕鬆很愉悅),我相信你必定能夠學得更快更好。

第一關:基本移動

若是有些事是不得不去忍受的,那就去尋找享受它的辦法。

我這人不算聰明,但貴在有自知之明,有一套很是適合本身的學習方法,因此只要是我想學的就沒有學不會的(但不會像天才那樣迅速)。通過長達一年半挫折體驗的磨礪,我開始修正本身的學習方式,如下是第一階段的總結。

有些東西是基礎中的基礎,永遠也擺脫不了,Vim 也不外如此。咱們沒法逃避這個過程,但卻能夠選擇接受它的方式。

Vim 的基本移動就是 h j k l 這四個鍵,分別表明 。很特別是嗎?好吧,我認可是很古怪。然而你必需要習慣它們,而且永遠不要更改它們的鍵位!由於這是 Vim 的哲學:

這些鍵位的存在當然有其歷史緣由,但更重要的是如下兩點:
1. 擺脫對視覺控制的依賴。也就是擺脫使用鼠標等可視化輔助工具來進行光標定位的習慣。人的大腦是頗有趣的,邏輯思惟和形象思惟分別由左右腦來控制,對於常寫代碼的人來講,保持邏輯思考的專一性很是重要,而不停的使用鼠標指針在屏幕上找來找去無疑會下降這方面的效率。
2. 這四個鍵在右手標準鍵位附近,對於移動手指產生的消耗最少。
你應該領會這個意圖:保持簡單。

但是真正的問題在於習慣真的很難改變,這種移動方式難倒了很多初學者,因此我選擇了一些更有趣味的方式。我認爲這種改變其實是在鍛鍊咱們接受新的交互方式,而學習交互的最理想方式無疑是寓教於樂,也就是玩遊戲。就連設計軟件應用也是同樣的道理,若是你的應用裏與一些很是規的或者複雜的操做,你總會設計一些互動性很強,很友好的引導教學。Github 爲了推廣 Git 是怎麼作的?他們聯合 Code School 錄了兩套很是棒的視頻,其中還包含在線的模擬終端操做!

而對於 Vim,我給你四條建議:

  1. Vim Adventures 這是一款在線遊戲,玩法超級簡單,控制鍵都是 Vim 的移動指令。你所要作的就是把鍵盤當成手柄,移動一個陰影來尋找字母、人物、寶藏、鑰匙等等。若是你沒法過關也沒有關係,重要的是控制方向這個環節可以把它練習到無需思考且不會犯錯就能夠了。
  2. Vim Snake 若是你以爲上一個遊戲有點難,由於沒法過關讓你有挫折感的話,這個遊戲就簡單多了——貪吃蛇,誰不會玩?只不過你只能用 h j k l 來控制方向而已。注意,只有在插入模式(i)才能吃到東西,只有在常規模式(ESC)才能移動方向。完整的流程以下:移動 -> 對準目標 -> 按下 i 直到吃到目標 -> 迅速按下 ESC -> 移動。關於模式,咱們下次解釋。
  3. Open Vim Tutorials 若是以上兩款遊戲都讓你爲難的話(喂,你不是吧?!),那麼這就是你的救星啦。請直接跳到第三章練習四方向移動,等到開始習慣這種感受了再繼續挑戰遊戲。
  4. Vim Genius 這也是好東西,它比上一個更貼近 Vim 的哲學。它不讓你看到要按哪一個鍵,而是給你文字提示讓你盲打對應的鍵,其好處是鍛鍊本身的肌肉記憶和條件反射思惟。然而它比較依靠你的自控能力與耐心,另外英文很差也會有點拖累。

實際上,以上四款推薦都不是單純的上下左右練習,哪怕是操控最簡單的也會有其餘鍵位的練習混雜其中。可是這個階段的目標只是征服上下左右而已,個人建議是保持注意力在這個目標上,保持簡單。

我在這些遊戲和互動式教程身上花費了一個多月的時間,天天平均在 20 分鐘左右(也就是 10 個小時),我說過我不算聰明人吧?固然我也沒有那麼笨啦,主要仍是由於我真的喜歡玩遊戲,喜歡挑戰本身的極限。不過我真正想說的是,不要着急!沒有人期待你三天拿下 Vim,你着急給誰看呀!我建議你學 Vim 不表明我認爲其餘編輯器/IDE 就是一坨屎,你能夠繼續使用別的工具來保持工做和學習的效率,只是 Vim 是值得一學的,並且是有點難度的東西,你可以保持抽點時間來練習一下就很不錯了。

在下一階段我還會繼續解釋爲何要保持簡單,繼續分享我對 Vim 哲學的感覺,另外咱們還將瞭解到很是重要的——模式(Modes)。記住,保持簡單,保持期待。

尾記:上文中提到了「一我的」,那個改變了我對 Vim 認識的人,他叫 Gary Bernhardt,他曾經錄製了一套很是棒的教學視頻系列,不過不是專門針對 Vim 的,主要話題涉及重構、程序設計、測試驅動開發、工具使用技巧等等,涉及到的語言主要是 Ruby Python 和 Shell Script。曾經這些視頻很便宜,9美刀/月,我有幸在那時所有得到(總共就花了這麼多,遇上恰當的時間,一個月內所有下完了)。遺憾的是他如今的注意力放在了別的事情上,已經再也不錄製視頻了(Twitter 上好多人強烈呼籲他繼續,結果他連 Twitter 都不玩了——固然,不是由於這個緣由),而過往的視頻都打包分紅四部分單獨出售,總售價不菲。然而,若是你不差錢的話,我依然建議你買來看一看,不僅僅是由於 Vim!事實上在那些視頻裏他專門講解 Vim 的時間很是少,可是全部的操做都是在 Vim 裏即時完成的,若是你看了就會知道那是一種什麼感受,什麼叫作如臂使指,什麼叫作爲所欲爲。雖然他確定不是獨一無二的高手,也不必定是最強悍的一個,可是我但願我能達到這個水平就很是很是知足了。你看,這個世界上總有一些人一些事會在不經意之間改變你的觀念,在一個採訪他的視頻裏有人問道:你是如何把 Vim 用的如此好的?他回答:保持簡單。個人理解是,高手口中的保持簡單,背後蘊含着無數的探索和嘗試,然而這不是困難,真正的困難是你沒法理解和保持這種簡單的目標。當你費盡心思想要打造最強編輯器,結果仍是不能達到你的理想狀態而後不得不放棄的時候,你已經背離了 Vim 的哲學。這個系列,雖然講的是 Vim,但我但願可以表述出個人感悟,而且讓讀者能感覺到我當初的感覺,而我相信所謂「Vim的哲學」也必定可以幫助你在其餘任何領域找到共通之處,這纔是學習 Vim 的最終價值和意義吧!

相關文章
相關標籤/搜索