對(duì)vim操作的積累和總結(jié)
要熟悉Vim映砖,首先肯定要了解Vim的三種模式,分別是Normal匿垄,Insert和Visual
1.Normal:
我認(rèn)為普通模式的存在是為了輸入和執(zhí)行命令做準(zhǔn)備的苞尝,先說輸入,第一步肯定要快速定位到想輸入的位置佑惠,在之前的一段時(shí)間里,我在普通模式下一直都只用基本的hjkl來進(jìn)行光標(biāo)的移動(dòng)齐疙,但是后來發(fā)現(xiàn)效率實(shí)在是太低了膜楷,重新翻了翻VIm操作手冊(cè),發(fā)現(xiàn)了如下很有用贞奋,并且快捷的光標(biāo)移動(dòng)操作:
w : 移動(dòng)到下一個(gè)單詞開頭赌厅,這樣就比單純的使用l要好很多,快很多
e : 移動(dòng)到當(dāng)前單詞的末尾
b : 光標(biāo)向后移動(dòng)一個(gè)單詞轿塔,同理特愿,比h要好
0 : 光標(biāo)移動(dòng)到行首(并不會(huì)忽略空格和縮進(jìn))
^ : 光標(biāo)移動(dòng)到當(dāng)前行第一個(gè)單詞的開頭仲墨,這個(gè)用得比0要多
$ : 光標(biāo)移動(dòng)到行尾,不知道為什么洽议,我一直覺得這個(gè)操作很麻煩宗收,能有個(gè)其他相對(duì)簡(jiǎn)便的就好了
( : 光標(biāo)移動(dòng)到下個(gè)句子,也就是說移動(dòng)到下一個(gè)空白行
) : 光標(biāo)移動(dòng)到上個(gè)句子
Ctrl + f:向下移動(dòng)一屏亚兄。
Ctrl + b:向上移動(dòng)一屏。
G:到文件尾
numG:移動(dòng)光標(biāo)到指定的行(num)采驻。(比如 10G 就是到第 10 行)
gg:到文件首
H:移動(dòng)光標(biāo)到屏幕上面
M:移動(dòng)光標(biāo)到屏幕中間
L:移動(dòng)光標(biāo)到屏幕下面
*:讀取光標(biāo)處的字符串审胚,并且移動(dòng)光標(biāo)到它再次出現(xiàn)的地方。
\#:和上面的類似礼旅,但是是往反方向?qū)ふ摇?/text:從當(dāng)前光標(biāo)處開始搜索字符串 text膳叨,并且到達(dá) text 出現(xiàn)的地方。必須使用回車來開始這個(gè)搜索命令痘系。如果想重復(fù)上次的搜索的話菲嘴,按 n。
?text:和上面類似汰翠,但是是反方向龄坪。
ma:在當(dāng)前光標(biāo)的位置標(biāo)記一個(gè)書簽,名字為 a复唤。書簽名只能是小寫字母健田。你看不見書簽的存在,但它確實(shí)已經(jīng)在那里了佛纫。
`a:到書簽 a 處妓局。注意這個(gè)不是單引號(hào),它一般位于大部分鍵盤的 1 的左邊呈宇。
`.:到你上次編輯文件的地方好爬。這個(gè)命令很有用,而且你不用自己去標(biāo)記它甥啄。
VIm的關(guān)鍵字補(bǔ)全功能:
可以使用Ctrl + p或者Ctrl + n來進(jìn)行自動(dòng)補(bǔ)全存炮,這兩條命令會(huì)循環(huán)搜索當(dāng)前文件的匹配的字符串。
Vim在普通模式下的替換和刪除
vim中可以使用:s命令來進(jìn)行替換型豁,如:
s/vim/vi/ 表示替換當(dāng)前行的第一個(gè)vim為vi
s/vim/vi/g 表示替換當(dāng)前行所有的vim為vi
vim可以用d來進(jìn)行刪除僵蛛,如:
dw可以刪除到下一個(gè)單詞的開頭
de可以刪除到本單詞的末尾
dd刪除整行
3dd刪除3行
D從光標(biāo)處刪除到該行末尾
d0從光標(biāo)處刪除到該行開頭
2.Visual:
可視的選擇模式有三種,分別是:
- v : 按字符進(jìn)行選擇
- V : 按行進(jìn)行選擇
- Ctrl + v : 按塊進(jìn)行選擇
前兩種是我用的比較多的迎变,按塊進(jìn)行選擇一般用于多行操作充尉,這三種選擇模式都可以配合之前的光標(biāo)移動(dòng)操作進(jìn)行選擇。
選擇之后可以進(jìn)行剪切或者復(fù)制:
d : 剪切
y : 拷貝
c : 剪切并且粘貼時(shí)會(huì)進(jìn)入插入模式
也可以不進(jìn)入可視模式來進(jìn)行剪切和復(fù)制衣形,比如:
dd/yy/cc : 剪切/拷貝/剪切(并進(jìn)入插入模式)當(dāng)前行
Tips: 進(jìn)入可視模式在進(jìn)行剪切拷貝相當(dāng)于先選擇后操作驼侠,也可以先操作后選擇姿鸿,比如dw表示剪切一個(gè)單詞,dj表示剪切一行等等倒源。
3.Insert:
插入模式并沒有什么好講的苛预,無非就是 a/A/i/I/o/O 這些常用的命令進(jìn)入到插入模式而已。
4.下面記錄一下平時(shí)常用的也是非常方便的一些命令組合:
dt" : 刪除內(nèi)容笋熬,直到碰到"热某,"可以替換成其他符號(hào),如‘胳螟,這個(gè)常用于字符串的刪除操作
ciw(change inner word) : 上面的命令是刪除直到"的內(nèi)容昔馋,ciw可以刪除當(dāng)前光標(biāo)所在的單詞(不管光
標(biāo)處在單詞的什么位置)并且進(jìn)入插入模式
caw(change a word) : 與change inner word 類似,但是具體的區(qū)別我google也沒有找到答案
如果各位看官知道的話麻煩在下面留言糖耸,并說明具體場(chǎng)景下應(yīng)用的不同秘遏,多謝!
ci{(change inner {) : 同理可應(yīng)用在一些被{ < " ' 包裹的代碼中嘉竟,如使用 ci{ 可以刪除{}包裹
的內(nèi)容并且進(jìn)入插入模式邦危。
ca{ : 也可使用ca{刪除由{}包裹的內(nèi)容以及{},非常實(shí)用I崛拧倦蚪!
同理可應(yīng)用到sentence, block, paragraph中, 如:
dis, das, dib, dsb, dip, dsp等等
vey vep : 替換當(dāng)前單詞為剪切板的單詞,首先移動(dòng)到單詞首妥粟,然后vey復(fù)制审丘,
然后移動(dòng)到要替換的單詞的開頭,vep粘貼
如果光標(biāo)的位置不在單詞開頭也可以這樣:
viwy viwp : 使用operator + motion的方式來選中inner word復(fù)制以及粘貼
多行操作勾给,如多行注釋: 首先移動(dòng)到要注釋的行的行首滩报,然后Ctrl+v,移動(dòng)光標(biāo)選擇多行播急,I(大寫的i)脓钾,
輸入注釋符,最后esc桩警,此時(shí)多行被注釋可训。
多行縮進(jìn)就相對(duì)比較簡(jiǎn)單,首先大寫的V捶枢,然后光標(biāo)選擇多行握截,<或者>進(jìn)行縮進(jìn)。
但是上面縮進(jìn)的方法還是不是很方便烂叔,為何不直接<i{谨胞,可以將{替換為其他符號(hào)如:( <等
還有一個(gè)很常用的相當(dāng)于一般ide里面的code format功能的縮進(jìn)用法,使用==蒜鸡,或者對(duì)多行進(jìn)行縮進(jìn)胯努,
如: 10==表示從當(dāng)前行開始到下面10行自動(dòng)進(jìn)行縮進(jìn)牢裳,而且可以自動(dòng)識(shí)別語(yǔ)言從而給出正確的縮進(jìn)格式。
使用gg=G可以對(duì)整個(gè)文件進(jìn)行自動(dòng)排版叶沛,使其有正確的縮進(jìn)格式