摘要:為什么要有模式呢以上其實(shí)已經(jīng)講述了一些原因,但真正的價(jià)值還在于接下來要講到的哲學(xué)。鼠標(biāo)與快捷鍵的操作治標(biāo)不治本,它們沒能從根本上解決這個(gè)問題。
學(xué)會用不同的角度去看待和理解這個(gè)世界,你收獲的永遠(yuǎn)會比你想象的更多。
上回我分享了如何掌握基礎(chǔ)移動的心得體會,而對于很重要的模式卻只是一帶而過,這其實(shí)是有原因的。過去我有過幾次教新手 Vim 的經(jīng)歷,按照慣常的方式先告訴他們模式切換,然后再講基礎(chǔ)移動。然而我發(fā)現(xiàn)一旦他們掌握了模式轉(zhuǎn)換,他們就會迫不及待的開始輸入,緊接著就會因?yàn)榉较蚩刂频膭e扭而倍感受挫,人就是這樣,誰都不喜歡在別人面前表現(xiàn)的很笨拙不是么?
所以我決定換個(gè)策略,利用游戲與交互教程幫助他們在輕松有趣的環(huán)境下先建立起信心,等他們回到真實(shí)環(huán)境的時(shí)候就不會有挫折感了。這很有效!其實(shí)學(xué)習(xí)這件事情大抵都是如此,入門時(shí)期的挫折遭遇很容易喪失興趣和信心,甚至導(dǎo)致此生都不再愿意去碰一下。緣分的建立不就是在合適的時(shí)間地點(diǎn)以合適的方式產(chǎn)生聯(lián)系嗎?
現(xiàn)在我想你已經(jīng)在不知不覺中建立起了微妙的聯(lián)系,接下來我們開始了解模式。
常規(guī)模式(Normal Mode)與插入模式(Insert Mode)這倆模式是最常用的,對于模式我們現(xiàn)在拋出兩個(gè)疑問:模式是干什么的呢?為什么要有模式呢?
模式是干什么的呢?大體上我們可以把“打字”這件事情分成兩個(gè)部分,一個(gè)是輸入,從無到有的過程;另一個(gè)是編輯,對已存在的文字進(jìn)行復(fù)合操作,包括:復(fù)制,剪切,移動,修改,刪除,格式化等等。
大部分的編輯器都只有一種模式,以上兩部分的操作合并在一起進(jìn)行,這就是為什么會有菜單和按鈕的原因,而對于文字的范圍選擇也需要額外的方法來輔助,比如快捷鍵和鼠標(biāo)操作等。無論是什么樣的情況我們都不得不迫使大腦在思考(輸入)和尋找(編輯)中不停轉(zhuǎn)換,即使你不在意這一點(diǎn),始終有一些操作你是無法流水化的。比如說:在光標(biāo)隨意停留在某處的時(shí)候,你能閉著眼睛用鼠標(biāo)點(diǎn)擊到某個(gè)功能嗎?Vim 就可以。換言之一旦你掌握了 Vim之后,所有的操作——強(qiáng)調(diào)一遍:所有的操作都可以不用尋找,不用鼠標(biāo)等工具輔助,你可以全副身心投入在你的主要目標(biāo)上。
嗯?你說你全部用快捷鍵?呵呵,那文字選擇呢?再快的快捷鍵也無法勝過 Vim 選擇任意目標(biāo)的速度。
好了,讓我們回到正題。從現(xiàn)在開始你要記住兩件事情:
一旦你想要在屏幕里寫點(diǎn)什么,就按下 i 鍵進(jìn)入輸入模式,它的含義是:Insert(插入);
一旦你需要停下來——不管是你想要進(jìn)行編輯或是你腦袋卡殼了要思考一下,總之只要你不再輸入了,就離開插入模式返回常規(guī)模式。記?。耗阍?Vim 里的常態(tài)是常規(guī)模式,而不是輸入模式。
關(guān)于返回模式的方法,常見的有三種,你可以現(xiàn)在就做出你的常規(guī)選擇,我會講出需要你考慮的要素:
使用 ESC 鍵:這是最通用的方法,它唯一的缺點(diǎn)就是距離標(biāo)準(zhǔn)鍵位較遠(yuǎn),然而由于它的位置在左上角,所以你也可以做一些強(qiáng)化練習(xí)來準(zhǔn)確的找到它。記?。翰灰存I盤去找,要形成肌肉記憶!也有很多人偏好修改 ESC 鍵位,比如說把它轉(zhuǎn)移到 CapsLock,即大寫鎖定鍵上去,這是可取的,并且也十分有效,然而我不推薦這么做。因?yàn)樾薷逆I位相對來說麻煩一些,在某些場景會讓你頗感不便。比如說你去客戶那里安裝服務(wù)器,遇到的幾乎都是標(biāo)準(zhǔn)鍵盤,不光是在 Vim 下讓你難受,其他的地方也是如此,因?yàn)?ESC 太常用了,而且沒有第二替代鍵。
使用 Ctrl-[ 組合鍵:它的功能和 ESC 完全等價(jià),只是組合鍵稍微困難一些。這里的竅門是 Ctrl 鍵的位置,我會把它重新映射到 CapsLock 鍵上去。這樣一來兩手的小指稍微移動就可以完成,稍加訓(xùn)練即可熟練掌握。這也是我不推薦 ESC 的第二個(gè)原因,至于之前提到過的鍵位映射帶來的后遺癥,不要緊,鍵盤上都有不止一個(gè)的 Ctrl 鍵,你根本無需調(diào)整鍵位。
使用 Ctrl-c 組合鍵:看起來它似乎比 Ctrl-[ 更容易一些,但是它們的含義有很大的差別。在終端下 Ctrl-c 的意思是“中斷”,基本上它會中止所有正在運(yùn)行的命令,當(dāng)然它也可以在 Vim 里帶我們中斷一切操作返回默認(rèn)的常規(guī)模式。但是 Vim 有一些操作其實(shí)是依賴正常的返回方法的,也就是 ESC 或者 Ctrl-[,使用 Ctrl-c 會導(dǎo)致這樣的功能無法被有效觸發(fā)(有不少插件依賴這些觸發(fā)功能,所以要小心莫名其妙的問題)。總而言之這是最不推薦的方法,除非你心里很有數(shù),并且能在正確的時(shí)候使用前面兩種方法。
返回模式太重要了,所以你一定要謹(jǐn)慎選擇適合你條件的方式并把它練至純熟,否則一旦養(yǎng)成習(xí)慣之后想要改變就得付出不小的代價(jià)(相信我,我就是 Ctrl-c 的受害者 T_T,我也是不久前才明白 Ctrl-c 的問題的,這還要感謝本站的 @依云……,不好意思當(dāng)時(shí)我還相當(dāng)自信呢)。哪怕你接觸 Vim 的頭幾天就只練習(xí)插入模式和常規(guī)模式的轉(zhuǎn)換我也認(rèn)為是值得的。
不少人在選擇第二種方式時(shí)遇到的最大阻礙就是無法盲打,[ 的位置無法準(zhǔn)確的找到。那我的建議是找不到就放棄吧,無論如何不要讓自己養(yǎng)成總看鍵盤的壞毛病。特別是程序員,在這一行干久了,找到 [ 的位置應(yīng)該不是什么難事,而盲打更是你需要掌握的基本能力,如果你還能使用標(biāo)準(zhǔn)指法那就太贊了!反正這一關(guān)你遲早是要過的。我剛剛習(xí)慣了全鍵盤盲打,正在朝著 80詞/分鐘的目標(biāo)邁進(jìn),回頭有時(shí)間我也可以寫點(diǎn)這方面的心得體會——哦!你看我就是一個(gè)壞例子,我學(xué)習(xí) Vim 的時(shí)候完全不會盲打呢?。ǖ俏夷軕?zhàn)勝自己,所以你也可以,對吧?)
另外,以上三種并非全部的可能性,我還見過許多種技巧,但總結(jié)起來無非就是在插入模式下設(shè)定新的鍵位映射。此時(shí)此刻我不打算教授這方面的東西,貪多嚼不爛,還記得我們的口號嗎?保持簡單。
為什么要有模式呢?以上其實(shí)已經(jīng)講述了一些原因,但真正的價(jià)值還在于接下來要講到的 Vim 哲學(xué)。
人們對待“輸入”和“編輯”這兩件事情的態(tài)度和分析是不同的。
輸入是流線式的,同時(shí)帶有很強(qiáng)的節(jié)奏感。比如你聊天打字的時(shí)候,或者撰寫文章的時(shí)候,你總是會在段落的末尾停頓一下,因?yàn)槟阈枰伎?,理順邏輯,組織語言;在思維不流暢的時(shí)候,你甚至?xí)懸痪渫R痪?,然后反?fù)編輯。寫程序更勝于此,我們思考的時(shí)間遠(yuǎn)遠(yuǎn)比真正輸入的時(shí)間要長的多。你看,這些停頓就好像樂譜里的休止符,它們梳理著音樂的節(jié)奏,提醒你何時(shí)換氣,何時(shí)調(diào)整情緒,多么自然。
然而編輯是碎片式的,且毫無規(guī)律可循,也無從預(yù)見。在編輯時(shí)最大的障礙就是位置的跳轉(zhuǎn)和任意的選擇。我們希望首先能夠盡可能在輸入和編輯之間流暢的轉(zhuǎn)換,其次希望能夠簡化編輯時(shí)的各種操作。鼠標(biāo)與快捷鍵的操作治標(biāo)不治本,它們沒能從根本上解決這個(gè)問題。
在 Vim 的世界里,模式轉(zhuǎn)換對應(yīng)著你的節(jié)奏感。寫東西寫到爽的時(shí)候你一定能體會到這種妙不可言的節(jié)奏感,模式轉(zhuǎn)換幫助你建立和強(qiáng)化你的節(jié)奏感。請不要為模式轉(zhuǎn)換做出的按鍵操作感到多余,因?yàn)橛貌涣硕嗑盟鼈兙蜁兂赡愕南乱庾R操作。就好像歌手要練習(xí)呼吸一樣自然而然。你會因?yàn)閷懽鲿r(shí)一時(shí)停頓下意識的轉(zhuǎn)筆感到多余嗎?你完全不會注意到,這是你的本能反應(yīng),提醒你你需要節(jié)奏。
在 Vim 的世界里,一切都是對象(好熟悉的一句話啊……)。一個(gè)字符是一個(gè)對象,一個(gè)詞是若干字符組成的對象所以它也是對象,一句話是若干個(gè)詞組成的對象所以它還是對象,一段話、一個(gè)代碼塊,甚至整篇文章,只要是邏輯上可以劃分的部分都可以視為對象。因此你不必靠鼠標(biāo)/快捷鍵的選擇來建立你要處理的對象(這樣你總得人為的鎖定區(qū)域邊界)取而代之的是合乎邏輯的語義化指令操作。
比如說,當(dāng)你在常規(guī)模式下輸入 caw 的時(shí)候,它的意思是:改寫一個(gè)詞(change a word)。
再例如,當(dāng)你在常規(guī)模式下輸入 d3k 的時(shí)候,它的意思是:向上刪除 3 行(delete 3 upwards),k 是上,你已經(jīng)習(xí)慣了吧?
你根本不必考慮具體的邊界在何處,對于人腦來說判斷邏輯事物的界限本就是一瞬間的事情,手動做出選擇難道不是一種退化嗎?你要做的就是告訴 Vim 你要對哪個(gè)目標(biāo)做出何種編輯動作,就像說話一樣簡單。OK,這樣一來的確有很多指令需要你掌握,但就像上面的例子所演示的那樣,絕大部分的指令都是語義化的,一旦建立起思維與指令之間的聯(lián)系,那便順理成章了。
于是在做出指令的時(shí)候總是需要返回常規(guī)模式就很容易理解了,因?yàn)榫庉嫴僮鞔驍嗔溯斎氲墓?jié)奏,你只是很自然的切換了你的節(jié)奏而已。這就是為什么我希望你記住只要你不再輸入就返回常規(guī)模式的原因,其背后蘊(yùn)含的哲學(xué)就是:保持節(jié)奏。
我有過好多年的音樂生涯,音樂教會了我許多事情,其中一件事就是節(jié)奏的重要性。我樂隊(duì)的鼓手曾經(jīng)說過:
速度快不一定節(jié)奏穩(wěn),但是節(jié)奏只要穩(wěn)了,速度就一定能上去。若是一個(gè)鼓手空有速度和技術(shù)但卻不夠穩(wěn),無法掌控節(jié)奏的話,他就毀了。
這是真理。追求技巧和速度是所有野心勃勃的新手們共有的特征,然而極少人能夠說服自己先建立起一個(gè)穩(wěn)定的技術(shù)基礎(chǔ),速度和技巧是水到渠成的事情?;蛟S這就是這個(gè)世界大師總是少數(shù)人物的緣故吧。
Vim 的模式轉(zhuǎn)換就是一種幫你建立起堅(jiān)實(shí)基礎(chǔ)的有效手段,它不是憑空臆造的,而是取道于人們的生理習(xí)慣并加以符號化。它足夠簡單,但卻在多年以來被證明行之有效。我不會教你如何獲得驚人的速度和超凡的技巧,因?yàn)檫@些東西你自然而然都會得到,前提就是:保持節(jié)奏,保持簡單。
預(yù)告到現(xiàn)在為止,似乎我講的干貨不夠多哦。不過不要擔(dān)心,前期需要強(qiáng)調(diào)和理解的哲學(xué)已經(jīng)足夠了,你也有了充裕的時(shí)間來消化它們,并且把基礎(chǔ)移動和模式轉(zhuǎn)化掌握于心(你做到了是吧?)。下一講我們開始奉獻(xiàn)干貨,先從一套基本的 Vim 配置開始。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24764.html
摘要:本文將以此為起點(diǎn),介紹一些替換小技巧。實(shí)話實(shí)說,使用命令來替換有違于大多數(shù)程序員的習(xí)慣。接下更進(jìn)一步,教多幾個(gè)小技巧。這么一來,替換將僅在當(dāng)前大括號內(nèi)生效。在替換局部變量時(shí),比起全局替換,這樣的替換方式無疑會更高效。 想必用過Vim的人都知道,在Vim里面,以下命令可以替換當(dāng)前文件的內(nèi)容: :[range]s/{要被替換的模式}/{替換的內(nèi)容}/[flags] 其中range指定替換命...
摘要:之所以能卓爾不群靠地就是一種自成一派且精悍有效的編輯器哲學(xué)當(dāng)然也是,就好像網(wǎng)游千千萬卻唯有一覽眾山小,那靠地不是技巧與外在,而是與眾不同的世界觀。征服其實(shí)是一種領(lǐng)悟,我融入了的哲學(xué)而已。這也是好東西,它比上一個(gè)更貼近的哲學(xué)。 就在幾個(gè)小時(shí)以前,我回答了一個(gè)關(guān)于推薦開發(fā)工具的問題,很多朋友表示喜歡和鼓勵(lì),非常感謝!我也很想多寫一些細(xì)節(jié),于是便起意開一個(gè)系列來聊聊我多次提到的 Vim。 ...
摘要:插件鍵位映射技巧性的配置等等都是錦上添花,它們有助于你進(jìn)一步提高效率以及個(gè)性化你的工作環(huán)境,但是對于哲學(xué)的理解幫助甚少。為你開啟語法高亮。你可以自定義各種語言的語法高亮,無非就是根據(jù)這些規(guī) 如果沒有挑戰(zhàn),人生將多么無趣! 兩種副本 在我的硬盤上總是保留著(至少)兩份 Vim 的配置文件。其中一份是所謂完全正式版,它的文件名是 .vimrc,到本系列結(jié)束的時(shí)候,我們將了解其中...
摘要:的哲學(xué)第四篇姍姍來遲,狗血的原因我就不多說了,好消息是我將為這個(gè)系列帶來一些動態(tài)演示。所以目前為止你學(xué)會上述四個(gè)動作指令就足夠了。以詞為單位使得我們可以更精確也是更具語義化的移動光標(biāo),并且要比逐個(gè)字符的移動要快得多。 Vim 的哲學(xué)第四篇姍姍來遲,狗血的原因我就不多說了,好消息是我將為這個(gè)系列帶來一些動態(tài)演示。原本我打算錄視頻的,但是文章都寫了那么些篇了,現(xiàn)在再錄視頻似乎晚了些,所以我...
摘要:原文鏈接適合自己的,才是最好的被稱為編輯器之神,是我用過之后才體會到的,用之前實(shí)在不敢對它做出什么評價(jià)。最初的不適,換來的是效率的飛升。感悟在學(xué)習(xí)使用的過程中,我最大的感悟就是適合自己的,才是最好的。 原文鏈接:Vim - 適合自己的,才是最好的 Vim 被稱為編輯器之神,是我用過之后才體會到的,用之前實(shí)在不敢對它做出什么評價(jià)。在大學(xué)時(shí)代,Vim 的大名就已如雷貫耳,但由于它陡峭的學(xué)...
閱讀 3158·2021-11-23 10:02
閱讀 3128·2021-11-16 11:53
閱讀 3104·2021-09-23 11:21
閱讀 3378·2019-08-30 13:02
閱讀 1638·2019-08-29 16:18
閱讀 1568·2019-08-29 12:55
閱讀 1467·2019-08-26 12:24
閱讀 2095·2019-08-26 10:36