vim 編輯器提供了很多的特性,要想全部掌握它們很困難。然而,花費更多的時間在指令行編輯器上總是有幫助的。毫無疑問,和 vim 使用者們進行交流能夠讓你更快地學習新穎有創造性的東西。
注: 本文中用到的例子,使用的 vim 版本是 7.4.52 。
<a target="_blank"></a>
如果你是一名軟體開發者或者把 vim 作為主要的編輯器,那麼可能很多時候你需要同時編輯多個檔案。“緊跟following”是在同時編輯多個檔案時可用的實用技巧。
不需要在多個 shell 界面中打開多個檔案,你可以通過把多個檔案的檔案名作為 vim 指令的參數進而在一個 shell 界面中打開多個檔案。比如:
<code>vim 檔案1 檔案2 檔案3</code>
第一個檔案(例子中的檔案1)将成為目前檔案并被讀入緩沖區。
在編輯器中,使用 <code>:next</code> 或 <code>:n</code> 指令來移動到下一個檔案,使用 <code>:prev</code> 或 <code>:n</code> 指令傳回上一個檔案。如果想直接切換到第一個檔案或最後一個檔案,使用 <code>:bf</code> 和 <code>:bl</code> 指令。特别地,如果想打開另外的檔案并編輯,使用 <code>:e</code> 指令并把檔案名作為參數(如果該檔案不在目前目錄中則需要完整路徑做為參數)。
任何時候如果需要列出目前打開的所有檔案,使用 <code>:ls</code> 指令。看下面展示的螢幕截圖。

注意 ”%a” 表示檔案在目前活動視窗,而 “#” 表示上一個活動視窗的檔案。
想節約時間并提高效率嗎?使用縮寫吧。使用它們能夠快速寫出檔案中多次出現、複雜冗長的詞。在 vim 中縮寫指令寫就是 <code>ab</code> 。
比如,當你運作下面的指令以後:
<code>:ab asap as soon as possible</code>
檔案中出現的每一個 <code>asap</code> 都會被自動替換為 <code>as soon as possible</code> ,就像你自己輸入的一樣。
類似地,你可以使用縮寫來更正常見的輸入錯誤。比如,下面的指令
<code>:ab recieve receive</code>
将會自動更正拼寫錯誤,就像你自己輸入的一樣。如果在一次特殊情況下你想阻止縮寫展開或更正發生,那麼你隻需要在輸入一個單詞的最後一個字母以後按 <code>ctrl + v</code> ,然後按空格鍵。
如果你想把剛才使用的縮寫儲存下來,進而當你下次使用 vim 編輯器的時候可以再次使用,那麼隻需将完整的 <code>ab</code> 指令(沒有起始的冒号)添加到 <code>/etc/vim/vimrc</code> 檔案中。如果想删除某個縮寫,你可以使用 <code>una</code> 指令。比如: <code>una asap</code> 。
有時,你需要從一個檔案将一段代碼或文本的一部分複制到另一個。當使用 gui(圖形界面)編輯器的時候,這很容易實作,但是當使用一個指令行編輯器的時候,這就變得比較困難并且很費時間。幸運的是, vim 提供了一種高效、節約時間的方式來完成這件事。
打開兩個檔案中的一個然後切分 vim 視窗來打開另一個檔案。可以通過使用 <code>split</code> 指令并以檔案名作為參數來完成這件事。比如:
<code>:split test.c</code>
上面的指令将分離視窗并打開檔案 “test.c”
注意到 <code>split</code> 指令水準分離 vim 視窗。如果你想垂直分離視窗,那麼你可以使用 <code>vsplit</code> 指令。當同時打開了兩個檔案并從一個檔案中複制好内容以後,按 <code>ctrl + w</code> 切換到另一個檔案,然後粘貼。
有時候當你對一個檔案做了大量更改以後才會意識到你對該檔案僅有 <code>隻讀</code> 權限。
雖然把檔案關閉,擷取權限以後再重新打開是一種解決方法。但是如果你已經做了大量更改,這樣做會很浪費時間,因為在這個過程中所有的更改都會丢失。 vim 提供了一種方式來處理這種情況:你可以在編輯器中在儲存檔案前更改檔案權限。指令是:
<code>:w !sudo tee %</code>
這個指令将會向你詢問密碼,就像在指令行中使用 <code>sudo</code> 一樣,然後就能儲存更改。
一個相關的技巧:在 vim 中編輯一個檔案的時候,如果想快速進入指令行提示符,可以在編輯器中運作<code>:sh</code> 指令,進而你将進入一個互動的 shell 中。完成以後,運作 <code>exit</code> 指令可以快速回到 vim 模式中。
大多數有經驗的程式員在 vim 上工作時都會啟用自動縮進。雖然這是一個節約時間的做法,但是在粘貼一段已經縮進了的代碼的時候會産生新的問題。比如,下圖是我把一段已縮進代碼粘貼到一個在自動縮進的 vim 編輯器中打開的檔案中時遇到的問題:
這個問題的解決方法是 <code>pastetoggle</code> 選項。在 <code>/etc/vim/vimrc</code> 檔案中加入下面這行内容:
<code>set pastetoggle=<f2></code>
然後當你在 <code>插入</code> 模式中準備粘貼代碼前先按 <code>f2</code> 鍵,就不會再出現上圖中的問題,這樣會保留原始的縮進。注意,你可以用其他的任何鍵來代替 <code>f2</code>,如果它已經映射到了别的功能上。
更進一步的提高你的 vim 編輯器技巧的唯一方法是,在你日複一日的工作中使用指令行編輯器。留意那些耗時多的操作,然後嘗試去尋找是否有編輯器指令可以很快地完成這個操作。
原文釋出時間為:2017-01-26
本文來自雲栖社群合作夥伴“linux中國”