1. 程式人生 > >編輯器之神-vim的使用技巧

編輯器之神-vim的使用技巧

vim VS. emacs

vim被譽為編輯器之神,而emacs被譽為神之編輯器。中國文化博大精深,他們究竟有什麼區別呢?作為emacs小白的我來說不想在這裡獻醜,直接貼上一篇部落格,有興趣的同學可以深入研究或者自行百度https://www.v2ex.com/t/332566

總之我對這兩句話的簡單理解是:vim是編輯器裡面最優秀的;而emacs則常常是大神所鍾愛的編輯器。貌似這個解釋有些牽強,反著說意思就是大神們不太喜歡最優秀的編輯器。暈,自己把自己的結論推翻了。

vi VS. vim

這裡我要說的是vim is not only vi。雖然vi是vim的祖先,但是他們兩個真的不是同一個編輯器,證據就是在輸入“vim”命令以後,vim的歡迎介面第一行寫著“VIM - Vi Improved”。

總之我對這兩個編輯器的簡單概括是:珍惜生命,請使用vim!

vimtutor

如果想學習vim,但是又不知道從哪裡學起,這裡有一個很好的vim學習教程。

不管你是macOS系統、windows系統或者其他Linux發行版系統,只要你在機器上安裝了vim,那麼就會自帶安裝vimtutor。劃重點:不管你在這個教程裡面怎麼操作,都不用擔心損壞這個教程,因為他有一個很神奇的功能就是每次開啟都是一樣的。vim開發人員早就考慮到一些小白使用者可能會把vimtutor修改的面目全非,導致下次啟動,不能再繼續學習的困擾。

廢話不多說,現在就可以開始你的vimtutor之旅了,希望你花30分鐘看完(最好操作一遍)vimtutor以後再回來,我相信你對於vim的基本操作已經有了一個簡單的認識。後面的內容將介紹一些比較高階的、可能會經常用的、並且在vimtutor中沒有提及的內容。

:help

我覺得help算是vim裡面最重要的命令,相當於linux的man命令。他會告訴我們一些設定的相關說明和語法,可以讓我們通過他提供的公式舉一反三,而不僅僅侷限在一個命令的使用上。

help命令的而使用方法是在命令模式下輸入help。這裡我並不打算講解vim的三種模式,有興趣可以上網搜尋,最簡單的識別命令模式的方法是你輸入的內容都會顯示在視窗的最下面一行,並且輸入內容以“:”開頭,當然“:”是你自己輸進去的。

這裡列舉一個通過“:help :s”查到的使用說明

  •  中括號中的內容為選填內容
  •  大括號內容是必填內容
  •  range是一個區間,表明要影響的行的範圍,如果沒有改引數說明隻影響當前行
  •  ubstitute這個是substitute單詞縮寫時候省略掉了,但是如果你執意要用全拼,也是可以的
  •  pattern意思為正則表示式,這裡值需要查詢到的內容
  •  string指的是需要將parttern匹配的內容替換成string位置的內容
  •  flags是控制:s行為的引數,不填在匹配行進行一次替換。比如g代表在一行範圍內多次替換,c代表確認替換
  •  count指定替換的次數,我一般不會用到這個引數

巨集的錄製和播放

巨集不得不說是vim裡面一大神器,他可以解放重複的勞動。

巨集的簡單理解就是對vim操作命令進行記錄,播放巨集就是將記錄的vim操作進行讓vim自己執行一遍。如果在@前面加上數字,比如100,就是說將記錄的巨集播放100遍。

那麼怎麼錄製巨集呢?紅的錄製是在normal模式下按下q,然後在按一任意26個字母(如:x)就可以將錄製到指定的暫存器(x)中了。接著可以進行一兩個簡單的操作,比如dd。然後再按下q結束巨集的錄製。

那麼怎麼播放巨集呢?在normal模式下輸入@和你剛才輸入的那個字母(如:x),就會看到他執行了一次剛才錄製的操作dd,如果我們輸入[email protected],就會神奇的發現他執行了100次dd操作,細思極恐。

翻頁

相信我們經常在檢視日誌的時候需要翻屏,我曾經就看到有人不會翻屏使用方向鍵在幾十兆的日誌中一行一行一行一行的移動,那時候我還是個小白,如果是在現在我一定會說:放開vim,讓我來!

其實一般我們查詢日誌都是先find,然後在在定位到具體範圍以後在向前翻頁,向後翻頁。

那麼問題來了,怎麼翻頁呢?

  • ctrl + f 向下翻一頁
  • ctrl + b向上翻一頁
  • ctrl + d向下翻半頁
  • ctrl + u向上翻半頁

你以為這就完了嗎?然並卵。

有時候我們還要定位游標呀,定位游標和翻頁略有不同

  • zz將游標定位到當前螢幕的中間位置
  • zt將游標定位到當前螢幕的第一行
  • zb將游標定位到當前螢幕的最後一行

暫存器

前面再講巨集的時候已經提到過一次暫存器了,這裡不要嫌煩,再提一次,因為他真的很重要。

我們經常需要一時間複製很多東西,然後在一個個貼上,這件事在其他編輯器上只能一個一個複製貼上,但是在vim裡面可以將內容先複製到暫存器裡面,然後在從暫存器裡面粘貼出來。我不清楚我描述清楚沒有[笑臉]

暫存器的吊起是“加任意一個字母,就可以調起任意指定的暫存器。如果後面連線的是複製操作,那麼複製的內容會被儲存到該暫存器中;如果 後面連結的是貼上操作,那麼該暫存器的內容會被貼上到游標後面。

歷史

很多人都不知道vim中有查詢歷史和命令模式歷史,甚至是很多部落格中都沒有提及這樣的概念,這真是太可惜了。

檢視查詢歷史我們只需要在normal模式下輸入q/然後就可以檢視之前的搜尋歷史,通過移動游標選中需要執行的歷史搜尋,然後按回車鍵執行搜尋,這個功能對於喜歡搜尋,又不喜歡複製來複制的人來說簡直以一種福音。

雖然命令模式不經常用,但是命令模式也有檢視歷史的命令q:。這樣就可以檢視到自己之前輸入過得歷史命令模式的命令,同樣移動游標到指定行,按回車執行選定的行命令。

一般人我不告訴他:對歷史命令還可以重新編輯,然後按回車鍵執行!

vim內呼叫系統命令

有時候我們需要在編輯的時候急性的執行一些系統命令,比如:pwd。因為是在控制檯,所以只能關閉vim,然後在執行pwd,然後在進入vim。這個技巧可以在vim裡面執行系統的pwd命令,那就是在normal模式下輸入:!pwd,然後就會看到pwd被神奇的執行了,按回車鍵可以回到vim中繼續編輯。

標記和跳轉

有時候我們經常要在冗長的日誌檔案裡面跳來跳去來對比內容,有的人索性直接吧相關內容複製出來或者截圖以後來做對比,我想說從現在起不用了,只要你學會了下面的技能:標記、跳轉。

標記的意思就是在文件裡面做一個標記,方便以後回來檢視他,在vim中的快捷鍵就是在normal模式下使用m,然後在跟26個字母中的任意鍵(比如:j),然後就把當前游標所在的位置標記到了指定的字母上(如果剛才你按下了mj那麼意思就是將當前游標位置記錄了到j字母上)。

這裡的跳轉不是指gg,G這類跳轉,是指跳轉到使用m標記過得地方,比如剛才我們將當前位置記錄到了j字母中,現在我們任意跳轉到vim其他地方,想要快速跳轉回來,只需要按下`j就可以跳轉到剛才標記的地方了(`鍵就是tab鍵上面那個最不起眼的,最不經常按的鍵,現在可以派上用場了),是不是很智慧,這個功能一遍編輯器是不支援的,可以說有是vim一大神器。想想有26個按鍵可以記錄跳轉,反正我是用不過來,用的最多的時候也不超過5個,如果你的記憶力超好,我相信26個記錄的位置也夠你用了吧。

待續……