1. 移動指令
(1). h j k l, 方向鍵,記憶技巧:左右方向的是最左邊和最右邊的,j向下打了個勾,所以是向下鍵,剩下的k就是向上的鍵了。
(2). b, before,上一個單詞(詞首)
w, word,下一個單詞(詞首)
e, end,下一個單詞(詞尾)
注意這些小寫命令由字母,點,數字,底線劃分,還有這三個對應的大寫字母的命令,B,W,E,類似的意思,但是是以空格區分移動的。總而言之,大寫的移動範圍要大。
(3). gg 首行
G 尾行,這兩個命令用的較多
(4). n% 跳到n%的那行
(5). ^/0 到行首,我有時特別喜歡0,非常清晰簡明的命令
$ 到行尾
(6). - 非空白行首向上移動
+ 非空白行首向下移動
(7). 行移動
複製代碼 代碼如下:
nj //向下移動n行
nk //向上移動n行
nh //向左移動n列
nl //向有移動n列
n_ //向下移動n-1行,並游標移動到非空白行首
n- //向上移動n行,並游標移動到非空白行首
(8).通過尋找字元移動
複製代碼 代碼如下:
fx/Fx //向後/前尋找字元x,行內跳轉很有用
tx/Tx //向後/前尋找字元x
//fx/Fx和tx/Tx的區別是用f游標停留在x上,用t游標停留在x的前面一個上
; //執行上次的fFtT
, //反方向執行fFtT,這兩個有意思
2. 插入,替換,刪除
(1). 學會a和i混用,不要只會用i進入插入模式,有時a進入插入模式後更方便,比如插入鍵盤右邊的字母符號,用a的話,左右手配合起來效率更高。
(2). 學會I和A,快速進入行首和行尾插入模式,特定時刻用起來超爽!
這個很好理解,小寫i是游標前,大小的I是整行前面,o/O類似,畫面很清晰。
(3). 學會o和O混用,不要只會用o進入下行編輯:
(3.1). 進入上行編輯,大寫的O更快,而不是ko,雙手比單手要快!
(3.2). 第一行前面想插入一行時,O比其他任何操作更直接和快速(不要先回到開頭<+插入模式>+斷行符號)
(4). r 快速替換字元,最大的好處是不許要切換模式,節省了大量時間,非常有用!(R,這個命令我用的少,有的時候用的特別混亂,就不說了)
s 刪除游標後一個字元並進入插入模式。該命令提供了r命令+進入插入模式的快速實現方法。
(5). c 這個命令很強大,歸類說明一下
複製代碼 代碼如下:
cm //m指的是前面的移動命令,類似的有dm,ym,g?m,gum,gUm
//改變內容(m定義了改變範圍)並進入插入模式,這裡說的改變就是刪除,舉例說明:
cw //刪除游標後一個單詞並進入插入模式
cl //刪除游標後一個字母並進入插入模式
(6). cc和S 修改當前行,意思是刪除該行所有字元內容,但保留行首空格
D和C 刪除該行游標後所有內容,無論字元還是空格,這個命令我用的很多:代碼審核格式化代碼時,刪除空行的空格和行尾空格。
(7). 學會結合t這個命令
複製代碼 代碼如下:
t //till的意思,這是我最喜歡的命令之一
dt" //行內刪除直到","不刪除
ct) //行內改變直到),)不刪除
... ...
(8). 學會x和X混用,分別是向前刪除和向後刪除字元
(9). :rd 刪除第r行
3.尋找
複製代碼 代碼如下:
# //向下一個尋找結果
* //向下一個尋找結果
//在#/*之後按n/N可以重複/反向重複它們的命令
//下面這兩個命令在編程時,很有用
gd //跳轉到游標變數的定義位置(局部變數)
gD //跳轉到游標變數的定義位置(全域變數)
4. 撤銷和恢複
複製代碼 代碼如下:
u //撤銷
ctrl + r //恢複
5. 滾動
複製代碼 代碼如下:
ctrl + e/y //向下/上一行一行的滾動
ctrl + d/u //向下/上半頁半頁的滾動
ctrl + f/b //向下/上一頁一頁的滾動
6. 可視模式(選擇塊)
可視模式其實非常有用,它的選擇很靈活,而且視覺效果上看著和滑鼠選擇一樣,學習成本低,但是功能強大。
(1). v 進入可視模式
(2). shift + v 也就是大寫的V,可視模式的行選擇,整行整行的選擇,用於剛好整行或者大篇幅內容的處理比較方便。
(3). ctrl + v 可視模式的列選擇,比行選擇模式更加細化,可選擇連續的列進入操作
選擇塊模式需要和其他命令結合:
複製代碼 代碼如下:
V + G //選擇當前行一直到文本結尾
V + G + d //刪除當前行一直到文本結尾
V + G + y //複製當前行一直到文本結尾
V + gg + d //刪除當前行一直到文本開頭
V + gg + y //複製當前行一直到文本開頭
ctrl+v + <移動>+ d //刪除選擇的列
ctrl+v + <移動>+ y //複製選擇的列
(4). gv 選中上次的選中地區
(5). 選中單詞,句子,段落:
複製代碼 代碼如下:
vaw //選中一個單詞(word)
vas //選中一個句子(sentence)
vap //選中一個段落(paragraph)
viw //選中一個單詞(word)
vis //選中一個句子(sentence)
vip //選中一個段落(paragraph)
(6). 選中括弧:
複製代碼 代碼如下:
vab //選擇()裡面的內容, 包括小括弧
vaB //選擇{}裡面的內容,包括大括弧
7.執行shell命令
複製代碼 代碼如下:
//記住這兩種用法,你嘗到它們的甜頭的
:sh //開啟shell,可執行shell命令,輸入exit退出shell返回到vim
:!cmd //直接執行shell
比如上篇文章中提到的自動化打包指令碼,我修改了代碼後,需要執行一下這個指令碼編譯一下,但是我還不想完全退出vim,因為我還需要繼續修改,就可以使用
複製代碼 代碼如下:
:sh //開啟一個終端
./build.sh //執行build.sh
exit //退出終端,繼續vim編輯
//或者
:!./build.sh //在vim視窗直接執行build.sh指令碼,然後按Enter或其他命令繼續
是不是很方便!
8. 專題一:快速選中、刪除、複製、修改引號或括弧內的內容
複製代碼 代碼如下:
//以下操作一定要熟記,能大大提高你編輯文本的效率
ci'、ci”、ci(、ci[、ci{、ci< //分別更改這些配對標點符號中的常值內容
di'、di”、di(或dib、di[、di{或diB、di< //分別刪除這些配對標點符號中的常值內容
yi'、yi”、yi(、yi[、yi{、yi< //分別複製這些配對標點符號中的常值內容
vi'、vi”、vi(、vi[、vi{、vi< //分別選中這些配對標點符號中的常值內容
9. 專題二:替換
尋找並替換操作使用的太頻繁了,下面針對這個專題從網上或書籍上收集了替換的幾個常用的強大用法:
複製代碼 代碼如下:
//文法
/**
* 說明
* range表示行數,如果是%表示所有行
* s表示substitution,替換的意思
* flag表示標誌,取值g,i,c等
* g表示global,全部
* i表示ignore,忽略大小寫
* c表示confirm,一個一個互動確認替換
* count表示從當前行到接下來的第幾行,表示範圍
*/
:[range]s/{pattern}/{string}/[flag] [count]
(1). 全部替換
參數g實現全部替換,否則只替換一個
(1). 全部替換
參數g實現全部替換,否則只替換一個
:%s/{old-pattern}/new-text/g
(2). 行內替換
%代表所有行,去掉%表示當前行,只替換當前行
:s/{old-pattern}/new-text/g
(3). 指定行範圍替換
對1到10行的結果替換
:1,10s/{old-pattern}/new-text/g
(4). 可視模式替換
如果你覺得數行數比較麻煩,可以使用可視模式,首先進入可視模式,然後選擇行
列,最後輸入:自動進入:'<,'>
後面加上s/{old-pattern}/new-text/g,則只替換選擇地區的結果
:'<,'>s/{old-pattern}/new-text/g
(5). 整詞替換,而不是部分匹配的單詞
對單詞匹配模式外包一個<和>
:s/\<blog\>/weibo/g //替換blog,但是cnblog,blogs則不會替換
(6). 多項替換
同時對多個匹配都替換成某一字串
:%s/\(good\|nice\)/awesome/g //good和nice都將被替換成awesome
(7). 確認式替換
參數c讓替換進行互動請求,需要你選擇y,n,a,l,q
複製代碼 代碼如下:
/**
* 選擇說明:
* y 替換且跳轉到下一個匹配結果
* n 不替換且跳轉到下一個匹配結果
* a 替換所有並退出互動模式
* l 替換當前並退出互動模式
* q 退出互動模式
*/
:s/{old-pattern}/new-text/gc
(8). 行首插入行號
把行首^替換成行號,可自訂具體形式
:%s/^/\=line(".")/g
10. 專題三:大小寫轉換
講這個,主要是覺得這個問題挺有意思的。
複製代碼 代碼如下:
~ //改變當前字元並自動切換到下一個字元,大寫變小寫,小寫變大寫,可以一直按
gum //轉化為小寫,m指移動命令,如:
//guw 游標後的一個單詞小寫化
//guG 游標所在行到最後行全部小寫化
//gut= 游標後直到=之間的字元小寫化
//羅嗦一句,gu還可以與可視模式結合,小寫化所選地區
gUm //轉化為大寫,用法同上
11. 專題四:錄製
這個其實很簡單,但也是很強大的功能,單獨柃出來說一下。
複製代碼 代碼如下:
//為操作定義宏或者取別名
//這個命令的強大之處在於使重複復雜指令的簡單化了
q //按下q開始錄製
x //x是這個錄製的寄存器,x可以是其它字元
dd //刪除當前行,這個操作可以自訂其他複雜的操作
q //錄製結束,現在dd這個操作被定義到了@x這個命令裡了
12. 專題五:數字增減
這個小技巧還挺有用的,比如說定義了一系列static final變數,而且時不時要中間插入一些新的變數,這些值一般都是遞增的,這時候這個技巧絕對比數字替換要方便。
複製代碼 代碼如下:
//Normal模式下執行
Ctrl + a //自增1
Ctrl + x //自減1
13. 小結
工善其事,先利其器。
先想到這些,必然有很多遺漏,後面想到了什麼,我會隨時添加更新進來。