我是這樣用vim寫代碼的--基礎篇


     本人是從重度vs使用者經過大概半年的時間轉變成的重度vim使用者。學習過程中也看過很多教程和經驗,一開始只能機械的記住什么鍵對應什么功能,常用有哪些插件,別人的vimrc長啥樣。很難理解為什么如此設計,vimrc里面為啥要設成那樣,有什么好處。一直覺得針對vim新手,缺乏簡明的介紹和解釋的文章。本文會先簡單介紹vim的基本操作以及vim的優勢,然后根據自己的理解,介紹一些按鍵的作用,並盡可能說明為什么要用,為什么要這么做以及一些使用技巧。

     在這之前,我是搞圖形學,做游戲客戶端的,因此最熟悉的是windows+vs組合環境。開始搞服務器后,坑爹了,公司的linux服務器只能遠程命令行連接,一種選擇是寫一段同步一下,編譯出錯,再同步一下,極度浪費時間。於是常用工具開始轉變為windows+vs+linux+vim,直到現在雖然工作環境在windows下,常用編輯工具已經成了vim。

     vim作為一個上手以后非常高效的編輯工具,即使平時主要使用IDE環境,也實在值得學習掌握,本人的vs也是常年使用vsvim插件,能有效提高編輯效率,減少鍵鼠切換。經常聽到有的程序員敲鍵盤噼噼啪啪毫無停頓,而有的則是敲幾下停一下再敲幾下,顯然前者的節奏很穩,聽着非常帶感。使用了vim后就可以做到手不離鍵盤,不用鼠標,持續穩定高能輸出。其實那聲音一定是在聊天啦。。。最終決定敲鍵盤的速度還是思考的時間。。。vim能帶來的好處是,讓雙手更輕松,減少不必要的操作,至少不用成為鼠標手了嘛。

 

     vim的安裝,mac/linux自帶,初學用自帶的就夠了,先把基本功能都熟悉,再根據自己的需求安裝特定編譯的版本即可。windows下,請下載官方最新版本,有exe文件直接安裝,總之目前vim的安裝算是非常簡單了,使用一般插件也不用自己編譯安裝。

     github vim windows官方版本地址:https://github.com/vim/vim-win32-installer/releases

 

     日常編輯中最常用的就是光標的移動,vs等常見編輯器的移動是利用鍵盤的上下左右鍵以及鼠標點擊移動光標。而vim不需要移動整個手掌以觸及方向鍵或移動整個手腕去摸鼠標。vim有三種模式,normal,insert,visual,每種模式下鍵盤區域的按鍵功能都不一樣,這樣在有限的手指區域內,除了打字外,可以做更多的操作,更可以自定義很多快捷鍵來幫助自己做特殊的操作。有很多文章會介紹vim的鍵位,並且肯定比本文全面,這里本文只希望盡可能解釋鍵位的含義和意圖,理解或想象鍵位的全稱或者設計意圖非常重要,可以幫助自己更快的熟悉這些鍵位,當熟悉了大多數編輯方式后,就能得心應手,比普通編輯器高效了。

     下面簡單介紹下vim三個模式的概念,並着重介紹normal模式下的各種操作方式。

     insert模式,就是正常的輸入模式,可以正常打字,組合按鍵以及功能鍵還是可以使用一些快捷操作。

     visual模式,字面理解視圖模式,在normal模式下按下v即可進入,然后使用normal模式下的移動命令,便可以選中大段文本,做后續操作了。常用的是按下v后,選中一段文字,進行復制(y)、剪切(d)、移動(<>)或者搜索等。另外按下ctrl-v,也可以進入批量編輯,這是個較高級的編輯,不太常用,不多說。

     normal模式,vim最常用的且區別於多數編輯器的模式,有的叫命令模式,也可以叫編輯模式,在該模式下,鍵盤整個是一套編輯按鍵。在insert或者visual模式下,按esc鍵(手小覺得esc也太遠的,可以改成更方便摸到的鍵,比如';;')即可進入normal模式。這里介紹一下常用的鍵位和命令,日常編輯中只用到一些常用鍵位就夠了。一些高級編輯技巧,日常使用很少,笨拙的方式也能完成,沒必要花太多時間研究,當然出於研究vim為目的就另當別論了,畢竟vs也是有很多神奇的快捷鍵的嘛。

 

     文件基本操作

     文件最基本的操作就是打開、關閉和保存了,這些都依賴vim內的命令行,normal模式下輸入冒號 ':' 緊跟命令:

     :new 在新窗口新建一個文件

     :tabnew 在新tab中新建文件

     :e filepath  編輯指定文件(edit),沒有則新建

     :q 不保存退出(quit),文件發生更改會提示,加嘆號!表示強制退出,放棄更改

     :w 保存當前文件(write)

 

     編輯中的移動操作

     h/j/k/l 依次對應向左下上右移動,設計上正好在標准手勢的右手手指下(標准手勢很重要啊),習慣以后,手指微小的移動就能移動光標,非常方便。

     w/b w可以理解為word,意為向前(右)一個單詞,單詞會被符號隔開,不僅僅是空格;b可以理解為back,向后(左)一個單詞。

     ctrl-d/ctrl-u/ctrl-f/ctrl-b 依次對應向下翻半頁(down),向上翻半頁(up),向下翻整頁(forward),向上翻整頁(back),前面我們已經看到單個按鍵b已經有別的用處了,因此翻頁這種操作就加一個ctrl組合鍵啦。另外可能很多人習慣了ctrl-f是搜索,比如我。。。所以我就放棄了向下翻整頁,把它改成了搜索,所有快捷鍵都是可以自定義覆蓋的。如此鼠標滾輪可以摳掉了,滾動條也可以隱藏掉了(因為vim狀態欄有顯示當前位置,因此可以不依賴滾動條觀察當前位置,可以省出更多空間看代碼呢。個人為了美觀而隱藏。。。匿。。。)

     ^/$/gg/G 移動到行首(shift+6),行尾(shift+4),文件頭(按兩下g),文件尾(shift+g)。這里^和$正是正則表達式的頭和尾的表示字母了。g我的理解是global,全文的頭和尾,歡迎提出更好的見解。。。

     實際編輯中,我們經常想移動的不僅僅是一個字或者一個單詞,可能是多個,這時只要先按下數字再按相應的按鍵即可。比如往右移3個字(3l),或者往右移3個單詞(3w)。甚至往右或往左移到下一個指定字母,需要用到前置的forward按鍵f和shift-f,比如往右移到下一個字母 'a' (fa),往左移到下一個字母 'a' (Fa)。習慣后,會明顯比鼠標點中某個單詞,或者狂按上下左右鍵高效的多。

     另外還有一個小問題很多人會遇到的,如果一行的文字非常多,導致分了好幾行顯示,此時想在里面往下往上移動怎么辦呢?

     ctrl-j/ctrl-k 行內向下和向上移動,沒有為什么。。。單個按鍵被用掉了啊。。。

     關於移動大概講這么多,熟練后單窗口的編輯移動基本夠用了,關鍵是要善於組合使用各種移動操作,才能以最高效簡單的方式完成精准的移動。

 

     復制剪切和粘貼

     接下來就是編程最重要的神操作了,恩。。。   

     ctrl-c 好吧,並不是想象中的復制。。。是一個中斷操作,平時基本用不到,提示,不要習慣性去按它。。。

     yw/yb/yy 復制當前單詞右側部分(按一下y再按一下w),復制當前單詞左側部分,復制當前行(按兩下y),y是前置鍵(yank,可以理解為激活復制),緊跟着表示要復制哪一部分。注意y前面還可以加數字,表示操作幾次,比如3yw,就會復制3個單詞。我就想復制整個單詞咋辦?要習慣多使用w和b,另外還有一種方便的選中整個單詞的方式viw(visual+inner word)。

     p/shift-p 粘貼到光標之后,粘貼到光標之前。由於normal模式下,光標是位於一個字下的,所以貼到前面和后面是不一樣的,熟練后也不會被困擾。一樣,可以3p,這樣就連續粘貼3次了呢。

     學會以上技能,就再也不用鼠標選一坨,然后ctrl-c/ctrl-v了;寫着寫着有想復制的函數名,esc退出到normal模式,按yw,然后hjkl或者ctrl-o直接返回之前正在輸入的地方,按下p,完成。整個過程無需任何停頓,只需稍動下手指。

     dw/db/dd 有復制肯定也要有剪切了,d(delete) 與y相對,是剪切的前置鍵。這里就是剪切一個單詞,剪切整行。

     剪切當前到行尾的所有字符,這個操作也很實用,復制粘貼一下,把后面原來的都刪掉。

     x 單個字剪切,畢竟常用的ctrl-x是剪切。

     上面都是小范圍的復制粘貼操作,如果我們要復制一大段文本,就要用到上文提到的visual模式了。按v進入visual模式,然后運用上文的移動命令,會發現移過的位置都成了選中狀態,此后按下y,整段文字即被復制,再到要粘貼的地方粘貼即可。比如要復制從當前位置到文本最后,那就vGy,然后到要粘貼的地方p,整段文字粘貼完,完全不需要鼠標點着按滾輪。

     

     搜索和替換

     說完復制粘貼,還有一個比較重要的操作是搜索和替換。編程所需要的搜索其實更多的是跳到定義等較高階的搜索,比較依賴插件。但是對於一些腳本語言以及文件內搜索,文本搜索還是很實用的。這里也簡單介紹下。

     #/*  向上搜索當前單詞,向下搜索當前單詞,這兩個是最方便的文件內搜索,如果開了多個窗口,窗口間是可以共同看到高亮結果的。加一個前置命令g,也可以理解為global,范圍更廣,只要包含該單詞的字符串都可以被搜索到。

     n/N 跳到下一個搜索結果(next),跳到上一個搜索結果(可以注意到,很多大寫都是反向操作)

     比如當前光標所在的單詞是word,要搜索別的word,就按下shift-8,即可跳到第一個結果,再按n/N即可依次跳到所有結果,或者回到上一個結果。但是有的時候需要搜索的不只是一個單詞啊,可能是一個指定的字符串啊,normal模式下,按下 '/' 即可在底下命令行里輸入要搜索的內容,之后還是按n/N。有的時候還要搜索正則表達式啊。。。按下 '/' 后是可以搜正則表達式的,要加反斜杠,不常用,用到再看。這里還有一個小技巧,按下 '/' 后,ctrl-r + ctrl-w 即可在命令行粘貼光標所在單詞。

     再說替換,替換是需要使用vim的內置命令的,在normal模式下,輸入 ':' 即可在命令行中鍵入命令。替換的命令是:s(substitute),舉兩個例子說明:

     :s/word/newword/g  當前行的word替換為newword,g代表所有出現的都替換,不加g則只替換第一次出現的

     :%s/word/newword/g  全文的word替換為newword,%代表全文

     日常替換也夠了,當然裝了插件后有更高端方便的查找和替換,不在本文基礎范圍了。

 

     幾個實用鍵位

     以下介紹幾個實用鍵位,后續想到再補充。

     shift-j 合並當前行與下一行,編輯中常常寫了多行想合並成一行,特別是某個分支語句,寫完發現只要一行,一個快捷鍵搞定,不用刪很多空格。。。

     (/)/shift-% 既然是寫代碼,段落的概念肯定是很重要的,左右括號可以在向下和向上跳到下一個空行。shift-%可以幫助在代碼塊成對的開頭和結尾之間來回跳,幫助觀察代碼段落和編輯。比如兩個成對的括號之間,lua代碼的function和end之間,代碼塊很長的if-else-end之間。

     </> 左右尖括號,用於代碼縮進,往左或往右縮進一個tab位。按v進入visual模式,選中一大段,即可實現大段的縮進。當然裝了插件針對特定語言還有更智能的縮進方法。這里是最基本的縮進鍵。

     ctrl-i/ctrl-o 前進和后退,個人把這倆快捷鍵理解為in和out,便於記憶,寫代碼經常需要在代碼之間跳來跳去,這時回到上一次編輯的地方,如果用鼠標就要找文件了,那是相當麻煩,使用這兩個快捷鍵,基本上來回切換就是瞬間的事。相當於vs的ctrl--和shift-ctrl--。

 

      以上應該是vim編輯最常用的鍵位和命令了,熟練掌握以上鍵位,快速方便的編輯就基本達成了。

      關於vim的基礎就說這么多,相信使用以上編輯方式已經比txt高效很多,當然相比vs還缺乏了很多跳轉、多窗口、調試等功能。關於vim的窗口切換,vimrc設置,插件等,后續會單獨介紹,從而真正實現高效的代碼編輯和調試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM