7種提升工做效率的Vim操做技巧

本文首發於VV姐的vim教程網 7種提升工做效率的Vim操做-Vim使用技巧(6),受權我原創發佈。javascript

Vim一直被認爲是一種很是高效的文本編輯器,可是對於普通用戶來講,很難在入門的時候就體會到Vim的所謂高效性。html

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

1. Vim重複操做命令.

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

假設想在如下的JavaScript代碼裏的 + 先後加上空格以使代碼更加美觀,能夠執行如下Vim操做:f+s␣+␣<Esc>;.;.;.編輯器

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

在上面的Vim操做中,首先使用字符查找命令 f 查找到第一個出現 + 的位置,而後使用 s 命令刪除光標下的字符後再進入插入模式,在輸入完 ␣+␣ 後退出插入模式,完成了第一個 + 先後增長空格的操做。spa

使用Vim命令 ; 會在當前行重複查找上次 f 命令所查找的目標字符,而 . 命令則重複上次的修改。所以,能夠連續輸入 3 次 ;. 來完成所有修改操做。命令行

vim視頻教程

:Vim命令 scl 的複合命令形式,表示刪除一個字符並進入插入模式,更多內容可參考Vim刪除並進入插入模式命令ccode

2. Vim宏

使用Vim . 命令重複執行一些比較簡單的任務時很是高效,可是當須要執行的操做比較複雜時,Vim宏是更理想的選擇。orm

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 或者一次性執行 9@a 就能夠替換完全部要編輯的行。

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 命令替換一個很長的單詞而又不想手動輸入它,能夠先在普通模模式下使用命令 piwpiW 將其複製下來,默認會包存到無名寄存器 " 裏,而後使用 <C-r>" 就能夠將複製的單詞輸入到 :s 命令中。

vim視頻教程

7. Vim光標快速移動

關於Vim光標移動的內容,能夠查看Vim光標移動命令彙總,在此先不作贅述。

相關文章
相關標籤/搜索