摘要:之所以能卓爾不群靠地就是一種自成一派且精悍有效的編輯器哲學當然也是,就好像網(wǎng)游千千萬卻唯有一覽眾山小,那靠地不是技巧與外在,而是與眾不同的世界觀。征服其實是一種領(lǐng)悟,我融入了的哲學而已。這也是好東西,它比上一個更貼近的哲學。
就在幾個小時以前,我回答了一個關(guān)于推薦開發(fā)工具的問題,很多朋友表示喜歡和鼓勵,非常感謝!我也很想多寫一些細節(jié),于是便起意開一個系列來聊聊我多次提到的 Vim。
這將是一個 Vim 的教學性質(zhì)的系列,但是和絕大多數(shù)同類教程不同的是,我的重點不在于技巧的傳授,而是在于對其觀念的理解和闡述。Vim 之所以能卓爾不群靠地就是一種自成一派且精悍有效的“編輯器哲學”(當然 Emacs 也是),就好像網(wǎng)游千千萬卻唯有 World of Warcraft 一覽眾山小,那靠地不是技巧與外在,而是與眾不同的世界觀。這個世界和這個時代,很多東西都能博人眼球,令人叫絕,但唯有那些體現(xiàn)出獨特價值觀的人或事物才能在人們心里留下難以磨滅的印記。
如何學習 Vim?我首先來講講宏觀上的心得體會:如何學習 Vim?這個問題的背后其實隱含著很多訴求,比如:
我很懶,不想看厚厚的文檔,不想學習無窮無盡的命令、腳本、配置選項……我就想要能夠快速上手,在最短時間里成為高手。
我很笨,我根本記不住那么多的模式和命令組合,我也永遠無法適應(yīng)古怪的功能鍵位,我只想“所見即所得”,點點鼠標就可以完成所有的操作。
我很煩,我要這要那,我要 debugger,我要 refactor,我要 auto-complete……一句話,我要 Out of box?。ㄩ_箱即用,應(yīng)有盡有)但是,誰能告訴我怎么自定義代碼匹配的片斷???誰能告訴我怎么定義語法檢查的范圍???誰能告訴我怎么換字體和顏色主題???
……等等
我理解,我都能理解?,F(xiàn)在我不會批判,未來我會逐一解答,請稍安勿躁。其實在我身上發(fā)生的故事就很有代表性,從我接觸 Vim 到現(xiàn)在足足超過兩年時間,在此期間我無數(shù)次鼓起勇氣想要征服這個巨獸,卻也同樣多次的短短幾天就敗下陣來(令人欣慰的是這些打擊倒是讓我重新認識了許多別的編輯器);也試圖偷懶直接使用其他人的 .vimrc 或者集成安裝包,但每次都是好景不長,一旦遇到想要微調(diào)的時候就抓狂不已了……
說真的我不止一次想過,或許我一輩子都沒法真正學會 Vim,但是內(nèi)心坦白地說:我對自己很失望。
我不想把這篇文字變水,所以內(nèi)心獨白就省略了。真正的關(guān)鍵在于一年半以后,也就是距今半年以前,一個人改變了我對于學習 Vim 這件事情的態(tài)度,或者說他刺激了我讓我有了新的動力和方法,我為自己制定了計劃并依次施行,終于成功地征服了它。
征服,不是指我無敵了,而是說我對這個工具已經(jīng)沒有任何使用障礙了,即使我還有很多不了解的東西,我也知道如何去應(yīng)對和掌握它們,剩下的只是時間問題。征服其實是一種領(lǐng)悟,我融入了 Vim 的哲學而已。
我之所以要說這些就是想告訴你們,學習 Vim 并不困難,不需要你多么天才,也不需要你多么努力。你只需要一個想要用它的意愿和一條忠懇的建議——也就是那個人教會我的:保持簡單(Keep it simple enough)。
這就是全部的秘訣。唯一阻礙你學會 Vim 的原因就是你總是把它想的太復雜,所以從一開始請放輕松,接下來我會與你分享幾乎所有的細節(jié),你一定不會讓自己感到失望的!
另外,為了客觀證明我不是吹牛逼(比如抄別人的教學帖子來博名望),也為了給你樹立一點信心(我的確知道如何學好 Vim),貼上我剛完成的 Smaterer 測驗分數(shù):
其實這個測試不算最難的,滿分 800,很遺憾我就差一步到 Master 級別,不過我已經(jīng)很高興了。半年而已,我沒有白費功夫(而且不是天天像讀書考試那樣的學,很輕松很愉悅),我相信你一定可以學得更快更好。
第一關(guān):基本移動如果有些事是不得不去忍受的,那就去尋找享受它的辦法。
我這人不算聰明,但貴在有自知之明,有一套非常適合自己的學習方法,所以只要是我想學的就沒有學不會的(但不會像天才那樣迅速)。經(jīng)過長達一年半挫折體驗的磨礪,我開始修正自己的學習方式,以下是第一階段的總結(jié)。
有些東西是基礎(chǔ)中的基礎(chǔ),永遠也擺脫不了,Vim 也不外如此。我們無法逃避這個過程,但卻可以選擇接受它的方式。
Vim 的基本移動就是 h j k l 這四個鍵,分別代表 左 下 上 右。很特別是嗎?好吧,我承認是很古怪。然而你必須要習慣它們,并且永遠不要更改它們的鍵位!因為這是 Vim 的哲學:
這些鍵位的存在固然有其歷史原因,但更重要的是以下兩點:
1. 擺脫對視覺控制的依賴。也就是擺脫使用鼠標等可視化輔助工具來進行光標定位的習慣。人的大腦是很有趣的,邏輯思維和形象思維分別由左右腦來控制,對于常寫代碼的人來說,保持邏輯思考的專注性非常重要,而不停的使用鼠標指針在屏幕上找來找去無疑會降低這方面的效率。
2. 這四個鍵在右手標準鍵位附近,對于移動手指產(chǎn)生的消耗最少。
你應(yīng)該領(lǐng)會這個意圖:保持簡單。
可是真正的問題在于習慣真的很難改變,這種移動方式難倒了不少初學者,所以我選擇了一些更有趣味的方式。我認為這種改變實際上是在鍛煉我們接受新的交互方式,而學習交互的最理想方式無疑是寓教于樂,也就是玩游戲。就連設(shè)計軟件應(yīng)用也是一樣的道理,如果你的應(yīng)用里與一些非常規(guī)的或者復雜的操作,你總會設(shè)計一些互動性很強,很友好的引導教學。Github 為了推廣 Git 是怎么做的?他們聯(lián)合 Code School 錄了兩套非常棒的視頻,其中還包含在線的模擬終端操作!
而對于 Vim,我給你四條建議:
Vim Adventures 這是一款在線游戲,玩法超級簡單,控制鍵都是 Vim 的移動指令。你所要做的就是把鍵盤當成手柄,移動一個陰影來尋找字母、人物、寶藏、鑰匙等等。如果你無法過關(guān)也沒有關(guān)系,重要的是控制方向這個環(huán)節(jié)能夠把它練習到無需思考且不會犯錯就可以了。
Vim Snake 如果你覺得上一個游戲有點難,因為無法過關(guān)讓你有挫折感的話,這個游戲就簡單多了——貪吃蛇,誰不會玩?只不過你只能用 h j k l 來控制方向而已。注意,只有在插入模式(i)才能吃到東西,只有在常規(guī)模式(ESC)才能移動方向。完整的流程如下:移動 -> 對準目標 -> 按下 i 直到吃到目標 -> 迅速按下 ESC -> 移動。關(guān)于模式,我們下次解釋。
Open Vim Tutorials 如果以上兩款游戲都讓你為難的話(喂,你不是吧?!),那么這就是你的救星啦。請直接跳到第三章練習四方向移動,等到開始習慣這種感覺了再繼續(xù)挑戰(zhàn)游戲。
Vim Genius 這也是好東西,它比上一個更貼近 Vim 的哲學。它不讓你看到要按哪個鍵,而是給你文字提示讓你盲打?qū)?yīng)的鍵,其好處是鍛煉自己的肌肉記憶和條件反射思維。然而它比較依靠你的自控能力與耐心,另外英文不好也會有點拖累。
實際上,以上四款推薦都不是單純的上下左右練習,哪怕是操控最簡單的也會有其他鍵位的練習混雜其中。但是這個階段的目標只是征服上下左右而已,我的建議是保持注意力在這個目標上,保持簡單。
我在這些游戲和互動式教程身上花費了一個多月的時間,每天平均在 20 分鐘左右(也就是 10 個小時),我說過我不算聰明人吧?當然我也沒有那么笨啦,主要還是因為我真的喜歡玩游戲,喜歡挑戰(zhàn)自己的極限。不過我真正想說的是,不要著急!沒有人期待你三天拿下 Vim,你著急給誰看呀!我建議你學 Vim 不代表我認為其他編輯器/IDE 就是一坨屎,你可以繼續(xù)使用別的工具來保持工作和學習的效率,只是 Vim 是值得一學的,而且是有點難度的東西,你能夠保持抽點時間來練習一下就很不錯了。
在下一階段我還會繼續(xù)解釋為什么要保持簡單,繼續(xù)分享我對 Vim 哲學的感受,另外我們還將了解到非常重要的——模式(Modes)。記住,保持簡單,保持期待。
尾記:上文中提到了“一個人”,那個改變了我對 Vim 認識的人,他叫 Gary Bernhardt,他曾經(jīng)錄制了一套非常棒的教學視頻系列,不過不是專門針對 Vim 的,主要話題涉及重構(gòu)、程序設(shè)計、測試驅(qū)動開發(fā)、工具使用技巧等等,涉及到的語言主要是 Ruby Python 和 Shell Script。曾經(jīng)這些視頻很便宜,9美刀/月,我有幸在那時全部獲得(總共就花了這么多,趕上恰當?shù)臅r間,一個月內(nèi)全部下完了)。遺憾的是他現(xiàn)在的注意力放在了別的事情上,已經(jīng)不再錄制視頻了(Twitter 上好多人強烈呼吁他繼續(xù),結(jié)果他連 Twitter 都不玩了——當然,不是因為這個原因),而過往的視頻都打包分成四部分多帶帶出售,總售價不菲。然而,如果你不差錢的話,我依然建議你買來看一看,不單單是因為 Vim!事實上在那些視頻里他專門講解 Vim 的時間非常少,但是所有的操作都是在 Vim 里即時完成的,如果你看了就會知道那是一種什么感覺,什么叫做如臂使指,什么叫做隨心所欲。雖然他肯定不是獨一無二的高手,也不一定是最強悍的一個,但是我希望我能達到這個水平就非常非常滿足了。你看,這個世界上總有一些人一些事會在不經(jīng)意之間改變你的觀念,在一個采訪他的視頻里有人問道:你是如何把 Vim 用的如此好的?他回答:保持簡單。我的理解是,高手口中的保持簡單,背后蘊含著無數(shù)的探索和嘗試,然而這不是困難,真正的困難是你無法理解和保持這種簡單的目標。當你費盡心思想要打造最強編輯器,結(jié)果還是不能達到你的理想狀態(tài)然后不得不放棄的時候,你已經(jīng)背離了 Vim 的哲學。這個系列,雖然講的是 Vim,但我希望能夠表述出我的感悟,并且讓讀者能感受到我當初的感受,而我相信所謂“Vim的哲學”也一定能夠幫助你在其他任何領(lǐng)域找到共通之處,這才是學習 Vim 的最終價值和意義吧!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24765.html
摘要:本文將以此為起點,介紹一些替換小技巧。實話實說,使用命令來替換有違于大多數(shù)程序員的習慣。接下更進一步,教多幾個小技巧。這么一來,替換將僅在當前大括號內(nèi)生效。在替換局部變量時,比起全局替換,這樣的替換方式無疑會更高效。 想必用過Vim的人都知道,在Vim里面,以下命令可以替換當前文件的內(nèi)容: :[range]s/{要被替換的模式}/{替換的內(nèi)容}/[flags] 其中range指定替換命...
摘要:為什么要有模式呢以上其實已經(jīng)講述了一些原因,但真正的價值還在于接下來要講到的哲學。鼠標與快捷鍵的操作治標不治本,它們沒能從根本上解決這個問題。 學會用不同的角度去看待和理解這個世界,你收獲的永遠會比你想象的更多。 上回我分享了如何掌握基礎(chǔ)移動的心得體會,而對于很重要的模式卻只是一帶而過,這其實是有原因的。過去我有過幾次教新手 Vim 的經(jīng)歷,按照慣常的方式先告訴他們模式切換,...
摘要:的哲學第四篇姍姍來遲,狗血的原因我就不多說了,好消息是我將為這個系列帶來一些動態(tài)演示。所以目前為止你學會上述四個動作指令就足夠了。以詞為單位使得我們可以更精確也是更具語義化的移動光標,并且要比逐個字符的移動要快得多。 Vim 的哲學第四篇姍姍來遲,狗血的原因我就不多說了,好消息是我將為這個系列帶來一些動態(tài)演示。原本我打算錄視頻的,但是文章都寫了那么些篇了,現(xiàn)在再錄視頻似乎晚了些,所以我...
摘要:原文鏈接適合自己的,才是最好的被稱為編輯器之神,是我用過之后才體會到的,用之前實在不敢對它做出什么評價。最初的不適,換來的是效率的飛升。感悟在學習使用的過程中,我最大的感悟就是適合自己的,才是最好的。 原文鏈接:Vim - 適合自己的,才是最好的 Vim 被稱為編輯器之神,是我用過之后才體會到的,用之前實在不敢對它做出什么評價。在大學時代,Vim 的大名就已如雷貫耳,但由于它陡峭的學...
摘要:插件鍵位映射技巧性的配置等等都是錦上添花,它們有助于你進一步提高效率以及個性化你的工作環(huán)境,但是對于哲學的理解幫助甚少。為你開啟語法高亮。你可以自定義各種語言的語法高亮,無非就是根據(jù)這些規(guī) 如果沒有挑戰(zhàn),人生將多么無趣! 兩種副本 在我的硬盤上總是保留著(至少)兩份 Vim 的配置文件。其中一份是所謂完全正式版,它的文件名是 .vimrc,到本系列結(jié)束的時候,我們將了解其中...
閱讀 2335·2021-10-08 10:04
閱讀 1111·2021-09-03 10:40
閱讀 1160·2019-08-30 15:53
閱讀 3317·2019-08-30 13:13
閱讀 2934·2019-08-30 12:55
閱讀 2287·2019-08-29 13:21
閱讀 1363·2019-08-26 12:12
閱讀 2764·2019-08-26 10:37