Android中vim編輯器進(jìn)階的使用介紹
1. 移動(dòng)指令
(1). h j k l, 方向鍵,記憶技巧:左右方向的是最左邊和最右邊的,j向下打了個(gè)勾,所以是向下鍵,剩下的k就是向上的鍵了。
(2). b, before,上一個(gè)單詞(詞首)
w, word,下一個(gè)單詞(詞首)
e, end,下一個(gè)單詞(詞尾)
注意這些小寫(xiě)的命令由字母,點(diǎn),數(shù)字,下劃線劃分,還有這三個(gè)對(duì)應(yīng)的大寫(xiě)字母的命令,B,W,E,類似的意思,但是是以空格區(qū)分移動(dòng)的??偠灾?,大寫(xiě)的移動(dòng)范圍要大。
(3). gg 首行
G 尾行,這兩個(gè)命令用的較多
(4). n% 跳到n%的那行
(5). ^/0 到行首,我有時(shí)特別喜歡0,非常清晰簡(jiǎn)明的命令
$ 到行尾
(6). - 非空白行首向上移動(dòng)
+ 非空白行首向下移動(dòng)
(7). 行移動(dòng)
nj //向下移動(dòng)n行
nk //向上移動(dòng)n行
nh //向左移動(dòng)n列
nl //向有移動(dòng)n列
n_ //向下移動(dòng)n-1行,并光標(biāo)移動(dòng)到非空白行首
n- //向上移動(dòng)n行,并光標(biāo)移動(dòng)到非空白行首
(8).通過(guò)查找字符移動(dòng)
fx/Fx //向后/前查找字符x,行內(nèi)跳轉(zhuǎn)很有用
tx/Tx //向后/前查找字符x
//fx/Fx和tx/Tx的區(qū)別是用f光標(biāo)停留在x上,用t光標(biāo)停留在x的前面一個(gè)上
; //執(zhí)行上次的fFtT
, //反方向執(zhí)行fFtT,這兩個(gè)有意思
2. 插入,替換,刪除
(1). 學(xué)會(huì)a和i混用,不要只會(huì)用i進(jìn)入插入模式,有時(shí)a進(jìn)入插入模式后更方便,比如插入鍵盤右邊的字母符號(hào),用a的話,左右手配合起來(lái)效率更高。
(2). 學(xué)會(huì)I和A,快速進(jìn)入行首和行尾插入模式,特定時(shí)刻用起來(lái)超爽!
這個(gè)很好理解,小寫(xiě)的i是光標(biāo)前,大小的I是整行前面,o/O類似,畫(huà)面很清晰。
(3). 學(xué)會(huì)o和O混用,不要只會(huì)用o進(jìn)入下行編輯:
(3.1). 進(jìn)入上行編輯,大寫(xiě)的O更快,而不是ko,雙手比單手要快!
(3.2). 第一行前面想插入一行時(shí),O比其他任何操作更直接和快速(不要先回到開(kāi)頭<+插入模式>+回車)
(4). r 快速替換字符,最大的好處是不許要切換模式,節(jié)省了大量時(shí)間,非常有用!(R,這個(gè)命令我用的少,有的時(shí)候用的特別混亂,就不說(shuō)了)
s 刪除光標(biāo)后一個(gè)字符并進(jìn)入插入模式。該命令提供了r命令+進(jìn)入插入模式的快速實(shí)現(xiàn)方法。
(5). c 這個(gè)命令很強(qiáng)大,歸類說(shuō)明一下
cm //m指的是前面的移動(dòng)命令,類似的有dm,ym,g?m,gum,gUm
//改變內(nèi)容(m定義了改變范圍)并進(jìn)入插入模式,這里說(shuō)的改變就是刪除,舉例說(shuō)明:
cw //刪除光標(biāo)后一個(gè)單詞并進(jìn)入插入模式
cl //刪除光標(biāo)后一個(gè)字母并進(jìn)入插入模式
(6). cc和S 修改當(dāng)前行,意思是刪除該行所有字符內(nèi)容,但保留行首空格
D和C 刪除該行光標(biāo)后所有內(nèi)容,無(wú)論字符還是空格,這個(gè)命令我用的很多:代碼審核格式化代碼時(shí),刪除空行的空格和行尾空格。
(7). 學(xué)會(huì)結(jié)合t這個(gè)命令
t //till的意思,這是我最喜歡的命令之一
dt" //行內(nèi)刪除直到","不刪除
ct) //行內(nèi)改變直到),)不刪除
... ...
(8). 學(xué)會(huì)x和X混用,分別是向前刪除和向后刪除字符
(9). :rd 刪除第r行
3.查找
# //向下一個(gè)查找結(jié)果
* //向下一個(gè)查找結(jié)果
//在#/*之后按n/N可以重復(fù)/反向重復(fù)它們的命令
//下面這兩個(gè)命令在編程時(shí),很有用
gd //跳轉(zhuǎn)到光標(biāo)變量的定義位置(局部變量)
gD //跳轉(zhuǎn)到光標(biāo)變量的定義位置(全局變量)
4. 撤銷和恢復(fù)
u //撤銷
ctrl + r //恢復(fù)
5. 滾動(dòng)
ctrl + e/y //向下/上一行一行的滾動(dòng)
ctrl + d/u //向下/上半頁(yè)半頁(yè)的滾動(dòng)
ctrl + f/b //向下/上一頁(yè)一頁(yè)的滾動(dòng)
6. 可視模式(選擇塊)
可視模式其實(shí)非常有用,它的選擇很靈活,而且視覺(jué)效果上看著和鼠標(biāo)選擇一樣,學(xué)習(xí)成本低,但是功能強(qiáng)大。
(1). v 進(jìn)入可視模式
(2). shift + v 也就是大寫(xiě)的V,可視模式的行選擇,整行整行的選擇,用于剛好整行或者大篇幅內(nèi)容的處理比較方便。
(3). ctrl + v 可視模式的列選擇,比行選擇模式更加細(xì)化,可選擇連續(xù)的列進(jìn)入操作
選擇塊模式需要和其他命令結(jié)合:
V + G //選擇當(dāng)前行一直到文本結(jié)尾
V + G + d //刪除當(dāng)前行一直到文本結(jié)尾
V + G + y //復(fù)制當(dāng)前行一直到文本結(jié)尾
V + gg + d //刪除當(dāng)前行一直到文本開(kāi)頭
V + gg + y //復(fù)制當(dāng)前行一直到文本開(kāi)頭
ctrl+v + <移動(dòng)>+ d //刪除選擇的列
ctrl+v + <移動(dòng)>+ y //復(fù)制選擇的列
(4). gv 選中上次的選中區(qū)域
(5). 選中單詞,句子,段落:
vaw //選中一個(gè)單詞(word)
vas //選中一個(gè)句子(sentence)
vap //選中一個(gè)段落(paragraph)
viw //選中一個(gè)單詞(word)
vis //選中一個(gè)句子(sentence)
vip //選中一個(gè)段落(paragraph)
(6). 選中括號(hào):
vab //選擇()里面的內(nèi)容, 包括小括號(hào)
vaB //選擇{}里面的內(nèi)容,包括大括號(hào)
7.執(zhí)行shell命令
//記住這兩種用法,你嘗到它們的甜頭的
:sh //打開(kāi)shell,可執(zhí)行shell命令,輸入exit退出shell返回到vim
:!cmd //直接執(zhí)行shell
比如上篇文章中提到的自動(dòng)化打包腳本,我修改了代碼后,需要執(zhí)行一下這個(gè)腳本編譯一下,但是我還不想完全退出vim,因?yàn)槲疫€需要繼續(xù)修改,就可以使用
:sh //打開(kāi)一個(gè)終端
./build.sh //執(zhí)行build.sh
exit //退出終端,繼續(xù)vim編輯
//或者
:!./build.sh //在vim窗口直接執(zhí)行build.sh腳本,然后按Enter或其他命令繼續(xù)
是不是很方便!
8. 專題一:快速選中、刪除、復(fù)制、修改引號(hào)或括號(hào)內(nèi)的內(nèi)容
//以下操作一定要熟記,能大大提高你編輯文本的效率
ci'、ci”、ci(、ci[、ci{、ci< //分別更改這些配對(duì)標(biāo)點(diǎn)符號(hào)中的文本內(nèi)容
di'、di”、di(或dib、di[、di{或diB、di< //分別刪除這些配對(duì)標(biāo)點(diǎn)符號(hào)中的文本內(nèi)容
yi'、yi”、yi(、yi[、yi{、yi< //分別復(fù)制這些配對(duì)標(biāo)點(diǎn)符號(hào)中的文本內(nèi)容
vi'、vi”、vi(、vi[、vi{、vi< //分別選中這些配對(duì)標(biāo)點(diǎn)符號(hào)中的文本內(nèi)容
9. 專題二:替換
查找并替換操作使用的太頻繁了,下面針對(duì)這個(gè)專題從網(wǎng)上或書(shū)籍上收集了替換的幾個(gè)常用的強(qiáng)大用法:
//語(yǔ)法
/**
* 說(shuō)明
* range表示行數(shù),如果是%表示所有行
* s表示substitution,替換的意思
* flag表示標(biāo)志,取值g,i,c等
* g表示global,全部
* i表示ignore,忽略大小寫(xiě)
* c表示confirm,一個(gè)一個(gè)交互確認(rèn)替換
* count表示從當(dāng)前行到接下來(lái)的第幾行,表示范圍
*/
:[range]s/{pattern}/{string}/[flag] [count]
(1). 全部替換
參數(shù)g實(shí)現(xiàn)全部替換,否則只替換一個(gè)
(1). 全部替換
參數(shù)g實(shí)現(xiàn)全部替換,否則只替換一個(gè)
:%s/{old-pattern}/new-text/g
(2). 行內(nèi)替換
%代表所有行,去掉%表示當(dāng)前行,只替換當(dāng)前行
:s/{old-pattern}/new-text/g
(3). 指定行范圍替換
對(duì)1到10行的結(jié)果替換
:1,10s/{old-pattern}/new-text/g
(4). 可視模式替換
如果你覺(jué)得數(shù)行數(shù)比較麻煩,可以使用可視模式,首先進(jìn)入可視模式,然后選擇行
列,最后輸入:自動(dòng)進(jìn)入:'<,'>
后面加上s/{old-pattern}/new-text/g,則只替換選擇區(qū)域的結(jié)果
:'<,'>s/{old-pattern}/new-text/g
(5). 整詞替換,而不是部分匹配的單詞
對(duì)單詞匹配模式外包一個(gè)<和>
:s/\<blog\>/weibo/g //替換blog,但是cnblog,blogs則不會(huì)替換
(6). 多項(xiàng)替換
同時(shí)對(duì)多個(gè)匹配都替換成某一字符串
:%s/\(good\|nice\)/awesome/g //good和nice都將被替換成awesome
(7). 確認(rèn)式替換
參數(shù)c讓替換進(jìn)行交互請(qǐng)求,需要你選擇y,n,a,l,q
/**
* 選擇說(shuō)明:
* y 替換且跳轉(zhuǎn)到下一個(gè)匹配結(jié)果
* n 不替換且跳轉(zhuǎn)到下一個(gè)匹配結(jié)果
* a 替換所有并退出交互模式
* l 替換當(dāng)前并退出交互模式
* q 退出交互模式
*/
:s/{old-pattern}/new-text/gc
(8). 行首插入行號(hào)
把行首^替換成行號(hào),可自定義具體形式
:%s/^/\=line(".")/g
10. 專題三:大小寫(xiě)轉(zhuǎn)換
講這個(gè),主要是覺(jué)得這個(gè)問(wèn)題挺有意思的。
~ //改變當(dāng)前字符并自動(dòng)切換到下一個(gè)字符,大寫(xiě)變小寫(xiě),小寫(xiě)變大寫(xiě),可以一直按
gum //轉(zhuǎn)化為小寫(xiě),m指移動(dòng)命令,如:
//guw 光標(biāo)后的一個(gè)單詞小寫(xiě)化
//guG 光標(biāo)所在行到最后行全部小寫(xiě)化
//gut= 光標(biāo)后直到=之間的字符小寫(xiě)化
//羅嗦一句,gu還可以與可視模式結(jié)合,小寫(xiě)化所選區(qū)域
gUm //轉(zhuǎn)化為大寫(xiě),用法同上
11. 專題四:錄制
這個(gè)其實(shí)很簡(jiǎn)單,但也是很強(qiáng)大的功能,單獨(dú)柃出來(lái)說(shuō)一下。
//為操作定義宏或者取別名
//這個(gè)命令的強(qiáng)大之處在于使重復(fù)復(fù)雜指令的簡(jiǎn)單化了
q //按下q開(kāi)始錄制
x //x是這個(gè)錄制的寄存器,x可以是其它字符
dd //刪除當(dāng)前行,這個(gè)操作可以自定義其他復(fù)雜的操作
q //錄制結(jié)束,現(xiàn)在dd這個(gè)操作被定義到了@x這個(gè)命令里了
12. 專題五:數(shù)字增減
這個(gè)小技巧還挺有用的,比如說(shuō)定義了一系列static final變量,而且時(shí)不時(shí)要中間插入一些新的變量,這些值一般都是遞增的,這時(shí)候這個(gè)技巧絕對(duì)比數(shù)字替換要方便。
//Normal模式下執(zhí)行
Ctrl + a //自增1
Ctrl + x //自減1
13. 小結(jié)
工善其事,先利其器。
先想到這些,必然有很多遺漏,后面想到了什么,我會(huì)隨時(shí)添加更新進(jìn)來(lái)。
相關(guān)文章
Android實(shí)現(xiàn)3D標(biāo)簽云簡(jiǎn)單效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)3D標(biāo)簽云簡(jiǎn)單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android仿微信雷達(dá)掃描效果的實(shí)現(xiàn)方法
最近看了一個(gè)視頻講了一種微信雷達(dá)掃描的實(shí)現(xiàn)方案,借鑒了一下,自己也寫(xiě)一個(gè)玩玩,所以下面這篇文章主要給大家介紹了利用Android模仿微信雷達(dá)掃描效果的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-06-06Android中通過(guò)樣式來(lái)去除app的頭及界面全屏(備忘)的實(shí)現(xiàn)方法
這篇文章主要介紹了Android中通過(guò)樣式來(lái)去除app的頭及界面全屏(備忘)的相關(guān)資料,需要的朋友可以參考下2016-12-12Kotlin設(shè)計(jì)模式之委托模式使用方法詳解
Kotlin提供了兩個(gè)本機(jī)功能來(lái)實(shí)現(xiàn)委托模式,第一個(gè)是接口委托(例如策略模式),另一種是屬性委托,它專注于類成員/屬性(例如延遲加載、observable等),它們共同提供了一組豐富而簡(jiǎn)潔的功能,通過(guò)本博客,您將了解在什么情況下使用此模式2023-09-09Android開(kāi)發(fā)之Sqliteopenhelper用法實(shí)例分析
這篇文章主要介紹了Android開(kāi)發(fā)之Sqliteopenhelper用法,實(shí)例分析了SQLiteOpenHelper類操作數(shù)據(jù)庫(kù)的相關(guān)技巧,需要的朋友可以參考下2015-05-05基于android實(shí)現(xiàn)五子棋開(kāi)發(fā)
這篇文章主要為大家詳細(xì)介紹了基于android實(shí)現(xiàn)五子棋開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02Android實(shí)現(xiàn)院系專業(yè)三級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)院系專業(yè)三級(jí)聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03