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

     本人是從重度vs使用者通過大概半年的時間轉變成的重度vim使用者。學習過程當中也看過不少教程和經驗,一開始只能機械的記住什麼鍵對應什麼功能,經常使用有哪些插件,別人的vimrc長啥樣。很難理解爲何如此設計,vimrc裏面爲啥要設成那樣,有什麼好處。一直以爲針對vim新手,缺少簡明的介紹和解釋的文章。本文會先簡單介紹vim的基本操做以及vim的優點,而後根據本身的理解,介紹一些按鍵的做用,並儘量說明爲何要用,爲何要這麼作以及一些使用技巧。linux

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

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

 

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

     github vim windows官方版本地址:https://github.com/vim/vim-win32-installer/releases正則表達式

 

     平常編輯中最經常使用的就是光標的移動,vs等常見編輯器的移動是利用鍵盤的上下左右鍵以及鼠標點擊移動光標。而vim不須要移動整個手掌以觸及方向鍵或移動整個手腕去摸鼠標。vim有三種模式,normal,insert,visual,每種模式下鍵盤區域的按鍵功能都不同,這樣在有限的手指區域內,除了打字外,能夠作更多的操做,更能夠自定義不少快捷鍵來幫助本身作特殊的操做。有不少文章會介紹vim的鍵位,而且確定比本文全面,這裏本文只但願儘量解釋鍵位的含義和意圖,理解或想象鍵位的全稱或者設計意圖很是重要,能夠幫助本身更快的熟悉這些鍵位,當熟悉了大多數編輯方式後,就能駕輕就熟,比普通編輯器高效了。編程

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

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

     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設置,插件等,後續會單獨介紹,從而真正實現高效的代碼編輯和調試。

相關文章
相關標籤/搜索