1. 程式人生 > >7 種提高工作效率的 VIM 操作

7 種提高工作效率的 VIM 操作

Vim一直被認為是一種非常高效的文字編輯器,但是對於普通使用者來說,很難在入門的時候就體會到Vim的所謂高效性。

本文介紹7種提高你工作效率和生產力的Vim使用技巧,主要集中在對某個檔案範圍內的特定目標執行相同的重複性操作。拋磚引玉,作為你體驗使用Vim進行高效操作的入門級教程。

1. Vim重複操作命令.

vim重複操作命令. (英文句點)介紹過,. 命令可以用於重複上次修改。在《Vim實用技巧》一書中花了大量篇幅介紹" . 正規化":一次按鍵移動,一次按鍵執行。

假設想在以下的JavaScript程式碼裡的 + 前後加上空格以使程式碼更加美觀,可以執行以下Vim操作:f+s␣+␣<Esc>;.;.;.

var foo = "method("+argument1+","+argument2+")"; 

在上面的Vim操作中,首先使用字元查詢命令 f 查詢到第一個出現 + 的位置,然後使用 s 命令刪除游標下的字元後再進入插入模式,在輸入完 ␣+␣ 後退出插入模式,完成了第一個 + 前後增加空格的操作。

使用Vim命令 ; 會在當前行重複查詢上次 f 命令所查詢的目標字元,而 . 命令則重複上次的修改。因此,可以連續輸入 3 次 ;.

 來完成全部修改操作。

 

vim視訊教程  

 

:Vim命令 s 是 cl 的複合命令形式,表示刪除一個字元並進入插入模式,更多內容可參考Vim刪除並進入插入模式命令c

2. Vim巨集

使用Vim . 命令重複執行一些比較簡單的任務時非常高效,但是當需要執行的操作比較複雜時,Vim巨集是更理想的選擇。

Vim巨集很適合針對一系列相似的行、段落,甚至是檔案,進行重複性的修改。用巨集把任意數目的按鍵操作錄製到暫存器,用於之後的回放,可以非常高效地實現重複操作。

假如有很多巨集定義的常量

#define CONST_A 1 
#define CONST_B 2
#define CONST_C 3 #define CONST_D 4 #define CONST_E 5 ...

現在想替換成const常量的形式

const int CONST_A = 1; const int CONST_B = 2; const int CONST_C = 3; const int CONST_D = 4; const int CONST_E = 5; ...

可以錄製這樣的一個巨集:

  • 按 qa 鍵開始錄製巨集,將巨集存到 a 暫存器
  • 按 0 將游標移到行首,按 ce 刪除 #define 並進入插入模式,輸入 const int 並按ESC回到普通模式
  • 按 e 來到變數名的最後一個字母,按 a 進入插入模式,輸入 ,按ESC回到普通模式
  • 按 A 將游標移動到最後並進入插入模式,輸入 ; 並按ESC回到普通模式
  • 按 j 將游標移到下一行,按 q 結束巨集錄製

錄完這個巨集之後,就可以按 @a 回放錄製的巨集操作。每執行一次巨集就會把當前行替換成const的形式並自動將游標移到下一行。

因此,只需要按9次 @a 或者一次性執行 [email protected] 就可以替換完所有要編輯的行。

 

vim視訊教程  

 

3. Vim視覺化模式

Vim視覺化模式下可以選擇一塊編輯區域,然後對選中的檔案內容執行插入、刪除、替換、改變大小寫等操作。

視覺化模式能高效地對一塊目標區域執行相同的操作,是在Vim場景下執行重複操作的一種高效方法。

比如,如果想一次性註釋多行文字,可以如下操作:

(1) 普通模式下按 Ctrl + v 進入塊選擇模式
(2) 向上或向下移動游標選擇多行
(3) 移動游標到行的起始位置
(4) 然後按大寫的I進入行首插入模式
(5) 插入註釋符
(6) 按Esc回到命令模式

 

Vim視覺化模式註釋多行  

 

需要注意的是:Vim同時編輯多行時,只有在當前的插入動作 結束後 (按 Esc 退為命令模式),之前選中的其它行才會顯示執行後的結果。

4. Vim normal命令

Vim normal 命令可以在命令列模式執行普通模式下的命令,當normal命令與Vim視覺化模式結合時,只需很少的操作就能完成大量重複性工作。

比如在編輯Markdown檔案時想在某些行前面都加上 - 讓普通文字行變成無序列表,可以先用 V 選中這些行,然後按 :'<,'>normal I- 並回車即可實現。

 

vim視訊教程  

 

5. Vim替換命令s

Vim命令列模式下使用 :substitute 命令 (縮寫形式 s ) 可以將指定範圍內的字元替換成其他目標字元,實現同時處理多個目標行的操作效果。

例如,假設希望將Vim當前開啟檔案的所有行尾多餘的空格刪除,可以使用Vim命令 :%s= *$==

其中,% 表示整個檔案範圍,*$ 表示以0個或多個 * 結尾的文字行,更多關於 :substitute 命令的使用,可以參考Vim替換命令substitute小結

 

vim視訊教程  

 

6. Vim暫存器

Vim中很多東西都是通過暫存器來傳遞,比如複製剪下一段文字、訪問系統的剪貼簿,錄製的巨集等,都是將對應的操作結果儲存在暫存器內。使用 :reg 暫存器名 命令可以檢視對應暫存器中的內容。

關於Vim暫存器的更多內容可以參考Vim教程網上的內容:Vim暫存器介紹Vim剪下、複製、貼上和刪除操作與Vim無名暫存器

在插入模式下或者命令列模式下,使用 <C-r>+暫存器名 可以輸入暫存器裡的內容。例如,在插入模式下,可以通過輸入 <C-r>" 來插入無名暫存器的內容,或輸入 <C-r>0 來插入複製專用暫存器中的內容。

舉個例子,想使用 :s 命令替換一個很長的單詞而又不想手動輸入它,可以先在普通模模式下使用命令 piw 或 piW 將其複製下來,預設會包存到無名暫存器 " 裡,然後使用 <C-r>" 就可以將複製的單詞輸入到 :s 命令中。

 

vim視訊教程  

 

7. Vim游標快速移動

關於Vim游標移動的內容,可以檢視Vim游標移動命令彙總,在此先不做贅述。