<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          世界上最厲害的編程神器 ,被大多數(shù)人拋棄了......

          共 4095字,需瀏覽 9分鐘

           ·

          2024-05-07 17:00

          如果你第一次在Linux上打開vim時(shí),遇到了圖中的情況,不要尷尬,其他人的第一次vi之旅也是這樣的。



          等你開始練習(xí)vi,就會(huì)發(fā)現(xiàn)很多古怪的現(xiàn)象,比如:


          為什么使用H、J、K、L來(lái)移動(dòng)光標(biāo)?用上下左右箭頭鍵不好嗎?


          為什么vi要分為分為指令模式,插入模式,命令行模式?切來(lái)切去,多麻煩??!


          模式切換為什么要用Esc鍵?它在鍵盤的左上角,想要按到它實(shí)在太難了!


          另外,vi的學(xué)習(xí)曲線為什么如此陡峭?



          這么難用的東西,我為什么要用它?IDE不香嗎?


          要想回答這些問題,我們得回到vi誕生的那個(gè)時(shí)候。



          1


          1975年秋天,Unix光環(huán)加身的大神Ken Thompson回到母校伯克利大學(xué)做學(xué)術(shù)休假,他把帶來(lái)的Unix系統(tǒng)安裝到了一個(gè)PDP-11/70上,順手還寫了一個(gè)Pascal編譯器。



          嗯,大牛就是這么牛。


          此時(shí)另外一位大神Bill Joy剛剛?cè)雽W(xué),他在用Pascal寫項(xiàng)目作業(yè)的時(shí)候,發(fā)現(xiàn)了編譯器的缺陷,他也決定做一個(gè)黑客,把這個(gè)編譯器改好。 



          那時(shí)候沒有IDE,他們使用一個(gè)叫ed的文本編輯器來(lái)程序,ed也是大神Ken Thompson寫的。



          ed不好用,后來(lái)有人寫出了em,Bill Joy又改進(jìn)了em, 把它變成了en ,然后是eo, ep......  最后是ex!


          不管怎么改,它們都是“行編輯器” ,和我們現(xiàn)在用的文本編輯器最大的不同是:


          沒有光標(biāo)!只能按行編輯!


          是不是有點(diǎn)匪夷所思?沒光標(biāo)怎么玩???


          舉個(gè)例子,有一個(gè)文件有兩行,內(nèi)容如下


          hello wold !

          this is an example


          我發(fā)現(xiàn)第一行的wold寫錯(cuò)了,想改一下,怎么做呢?


          那第一步需要先輸入1(表示選中第一行),第一行就會(huì)顯示出來(lái)。


          然后用s 命令調(diào)用搜索函數(shù),后面跟著搜索文本和替換文本


          再輸入1,看看結(jié)果對(duì)不對(duì)。


          整個(gè)過(guò)程如下,是不是挺讓人崩潰的?


          1

          hello wold !

          s/wold/world

          1

          hello world !


          唉,當(dāng)時(shí)的程序員過(guò)的都是什么日子??!


          Bill Joy 使用ex這個(gè)“趁手”的工具,很快就把Thompson留下的“爛攤子”Pascal編譯器給收拾好了,新的Pascal編譯速度很快,運(yùn)行起來(lái)也很快,深受學(xué)生們的喜愛。


          后來(lái),伯克利大學(xué)購(gòu)買了一批叫做ADM-3A的終端,在屏幕上終于支持可以隨意移動(dòng)的光標(biāo)了!



          Bill Joy 欣喜異常,他花了幾個(gè)月時(shí)間熬夜,重新設(shè)計(jì)了ex, 增加了“可視化模式”,ex變成了大名鼎鼎的vi。



          2


          如果你自己看看ADM-3A終端的鍵盤,你就會(huì)發(fā)現(xiàn)兩件神奇的事情。



          1.它沒有單獨(dú)的上下左右鍵


          所以H、J、K、L 鍵只能“兼職”來(lái)移動(dòng)光標(biāo)。


          2.Esc鍵和現(xiàn)在的Tab鍵在同一位置


          Bill Joy 用它來(lái)做模式切換很方便,左手無(wú)需離開主行就可以輕松按到。


          盡管后來(lái)PC的鍵盤發(fā)生了很大變化,但是習(xí)慣成自然,這兩個(gè)操作依然被無(wú)數(shù)用戶守護(hù)者,沿用至今。


          vi是從ex等行編輯器發(fā)展而來(lái),也繼承了很多行編輯器的操作,比如用戶都可以使用類似 /pattern 的命令來(lái)搜索文本,以及使用 


          s/old/new/ 的形式來(lái)替換文本,或者通過(guò)指定行號(hào)來(lái)定位文本(例如,3 定位到第三行,$ 定位到最后一行)


          這些操作如果在編輯模式下,就會(huì)出問題,3可能就表示用戶的文本,而不是命令了。


          當(dāng)然,也可以在編輯模式引入一個(gè)特殊的鍵如ctrl 來(lái)處理,最常見的是ctrl + c 表示復(fù)制, ctrl+v表示粘貼。


          但是,如果一個(gè)字母無(wú)法表達(dá)想要做的事情,需要敲入多個(gè)字母的時(shí)候,ctrl特殊鍵的方式就痛苦了,畢竟一個(gè)手指按著ctrl鍵,然后再敲一長(zhǎng)串字母是很不爽的,對(duì)吧?


          vi把編輯模式和命令模式區(qū)分開,就可以在命令模式玩出花兒來(lái),甚至可以基于基本的詞來(lái)“造句”


          動(dòng)詞

          動(dòng)詞表示對(duì)文本的操作,例如


          d  delete  刪除

          r   replace  替換

          y  yank  復(fù)制

          v  visual  選擇


          名詞

          表示待編輯的文本對(duì)象


          w  word  一個(gè)單詞

          s   sentence  一個(gè)句子

          p  paragraph  一個(gè)段落


          修飾符(有人稱為介詞)

          表示待編輯文本的范圍或者位置


          i   inside     表示在...之內(nèi)

          a  around  表示環(huán)繞

          t   till          直到某個(gè)字符(不包括該字符)

          f   find        直到某個(gè)字符(包括該字符)


          然后就可以組詞成句了:動(dòng)詞 + 介詞 + 名詞 ,例如:


          刪除當(dāng)前的單詞 : diw (delete inside word)

          改變當(dāng)前的句子:cis(change inside sentence)

          刪除文本直到字符e : dte (delete till 'e')

          選擇一個(gè)句子:vis (visual inside sentence)


          非常強(qiáng)大也非常自然,并且vi還支持自定義,可以定制一套屬于自己的動(dòng)詞名詞結(jié)構(gòu)出來(lái)。


          當(dāng)然,復(fù)雜的操作可以用鼠標(biāo)+菜單的方式來(lái)實(shí)現(xiàn),那就需要把手從鍵盤上挪開了。


          值得注意的是,vi 是在Modem只有300波特率的時(shí)候編寫的 !


          即使后來(lái)的1200波特率,傳輸文本的速度也比大多數(shù)人閱讀的速度慢,更別說(shuō)300波特率了,這深刻地影響了vi的設(shè)計(jì)。


          Bill Joy曾經(jīng)“酸酸地”說(shuō)過(guò):那些開發(fā)Emacs的家伙們坐在MIT的實(shí)驗(yàn)室中,有著像現(xiàn)在光纖一樣快的網(wǎng)絡(luò),他們可以在屏幕閃爍的情況下發(fā)出有趣的命令,而我坐在伯克利的簡(jiǎn)陋房子里,用著極其緩慢的調(diào)制解調(diào)器,幾乎無(wú)法讓光標(biāo)離開底線。人們不會(huì)知道,vi是為了一個(gè)已經(jīng)消失的世界編寫的。



          3


          1979年5月,Bill Joy發(fā)布了vi,初期用戶可能只有75個(gè)人。


          但是vi像野火一樣,迅速燒遍了Unix世界。


          1988年,Bram Moolenaar 寫出了vi的模仿品,Vi IMitation(簡(jiǎn)稱vim)。


          隨后幾年,他不斷完善,1991年,正式發(fā)布了vim,不過(guò),此時(shí)它的含義是 Vi IMproved。


          不管怎么模仿、改進(jìn),它依然保留了vi那些來(lái)自 ADM-3A的,“古怪”的按鍵和模式,因?yàn)檫@已經(jīng)成了vi程序員的信仰。


          一旦你跨過(guò)了那陡峭的學(xué)習(xí)曲線,真正掌握了vim,你就掌握了一個(gè)最厲害的編程神器,那些vim熟手在使用vim時(shí),雙手在鍵盤上翻飛,光標(biāo)在屏幕上游動(dòng),代碼在飛速地變換,讓人賞心悅目。


          但是,vim“古怪”的按鍵和模式,讓更多的程序員淺嘗輒止,退回到了傳統(tǒng)的編輯器和IDE,不能不說(shuō),這是一個(gè)很大的遺憾。

          本文作者劉欣,著有暢銷書《碼農(nóng)翻身》,《半小時(shí)漫畫計(jì)算機(jī)》,前IBM架構(gòu)師,領(lǐng)導(dǎo)過(guò)多個(gè)企業(yè)應(yīng)用架構(gòu)設(shè)計(jì)和開發(fā)工作;洞察技術(shù)本質(zhì),擅長(zhǎng)用故事去講解復(fù)雜技術(shù)。

          往期回顧

          1、微軟開源MS-DOS操作系統(tǒng)源碼,沖到GitHub第一了!
          2、面試官竟然問我:你和 985/211 比有啥優(yōu)勢(shì)?
          3、凌晨4點(diǎn)排隊(duì),連去6次都沒成!網(wǎng)友:攜號(hào)轉(zhuǎn)網(wǎng)還這么難?
          4、只需一鍵,Win11已破~
          5、英特爾指責(zé)主板制造商瞎搞 導(dǎo)致CPU不穩(wěn)定

                  

          點(diǎn)擊關(guān)注公眾號(hào),閱讀更多精彩內(nèi)容

          瀏覽 276
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色成人网站免费在线观看 | 波多野结衣高清无码视频 | 成人精品免费视频 | 日本乱伦网站 | 尹人大香蕉手机网 |