去年9月份寫了《Android拓展系列(4)--vim編輯器的基本使用》,記錄了最簡單的vim操作。但是vim魅力來自於他神出鬼沒的技巧操作。
這些技巧,或是巧妙組合利用vim特性,或是來自於特定場合的經驗總結,或是特殊小功能。
冰凍三尺,非一日之寒!
這些技巧都需要在實踐中不斷的練習或者使用,直到你感覺自己悄悄的上癮。
學會了這些技巧,不僅可以讓你如虎添翼,如有神助;而且絕對是你程式員身份的一種象徵,它代表著專業,高端!
編輯器之神!
但是,也不要被這些嚇到,只要堅持,經過開始陡峭的學習曲線之後,你會看到光明!
下面我根據自己的經驗,挑選一些命令來特別說明(為了簡明清晰,盡量去掉那些特別簡單或者使用很少的命令)。
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.shexit //退出終端,繼續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實現全部替換,否則只替換一個
:%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 //自增1Ctrl + x //自減1
13. 小結
工善其事,先利其器。
先想到這些,必然有很多遺漏,後面想到了什麼,我會隨時添加更新進來。