對vim操作的積累和總結
要熟悉Vim,首先肯定要了解Vim的三種模式,分別是Normal,Insert和Visual
1.Normal:
我認為普通模式的存在是為了輸入和執行命令做準備的,先說輸入,第一步肯定要快速定位到想輸入的位置,在之前的一段時間里,我在普通模式下一直都只用基本的hjkl來進行光標的移動,但是后來發現效率實在是太低了,重新翻了翻VIm操作手冊,發現了如下很有用,并且快捷的光標移動操作:
w : 移動到下一個單詞開頭,這樣就比單純的使用l要好很多,快很多
e : 移動到當前單詞的末尾
b : 光標向后移動一個單詞,同理,比h要好
0 : 光標移動到行首(并不會忽略空格和縮進)
^ : 光標移動到當前行第一個單詞的開頭,這個用得比0要多
$ : 光標移動到行尾,不知道為什么,我一直覺得這個操作很麻煩,能有個其他相對簡便的就好了
( : 光標移動到下個句子,也就是說移動到下一個空白行
) : 光標移動到上個句子
Ctrl + f:向下移動一屏。
Ctrl + b:向上移動一屏。
G:到文件尾
numG:移動光標到指定的行(num)。(比如 10G 就是到第 10 行)
gg:到文件首
H:移動光標到屏幕上面
M:移動光標到屏幕中間
L:移動光標到屏幕下面
*:讀取光標處的字符串,并且移動光標到它再次出現的地方。
\#:和上面的類似,但是是往反方向尋找。
/text:從當前光標處開始搜索字符串 text,并且到達 text 出現的地方。必須使用回車來開始這個搜索命令。如果想重復上次的搜索的話,按 n。
?text:和上面類似,但是是反方向。
ma:在當前光標的位置標記一個書簽,名字為 a。書簽名只能是小寫字母。你看不見書簽的存在,但它確實已經在那里了。
`a:到書簽 a 處。注意這個不是單引號,它一般位于大部分鍵盤的 1 的左邊。
`.:到你上次編輯文件的地方。這個命令很有用,而且你不用自己去標記它。
VIm的關鍵字補全功能:
可以使用Ctrl + p或者Ctrl + n來進行自動補全,這兩條命令會循環搜索當前文件的匹配的字符串。
Vim在普通模式下的替換和刪除
vim中可以使用:s命令來進行替換,如:
s/vim/vi/ 表示替換當前行的第一個vim為vi
s/vim/vi/g 表示替換當前行所有的vim為vi
vim可以用d來進行刪除,如:
dw可以刪除到下一個單詞的開頭
de可以刪除到本單詞的末尾
dd刪除整行
3dd刪除3行
D從光標處刪除到該行末尾
d0從光標處刪除到該行開頭
2.Visual:
可視的選擇模式有三種,分別是:
- v : 按字符進行選擇
- V : 按行進行選擇
- Ctrl + v : 按塊進行選擇
前兩種是我用的比較多的,按塊進行選擇一般用于多行操作,這三種選擇模式都可以配合之前的光標移動操作進行選擇。
選擇之后可以進行剪切或者復制:
d : 剪切
y : 拷貝
c : 剪切并且粘貼時會進入插入模式
也可以不進入可視模式來進行剪切和復制,比如:
dd/yy/cc : 剪切/拷貝/剪切(并進入插入模式)當前行
Tips: 進入可視模式在進行剪切拷貝相當于先選擇后操作,也可以先操作后選擇,比如dw表示剪切一個單詞,dj表示剪切一行等等。
3.Insert:
插入模式并沒有什么好講的,無非就是 a/A/i/I/o/O 這些常用的命令進入到插入模式而已。
4.下面記錄一下平時常用的也是非常方便的一些命令組合:
dt" : 刪除內容,直到碰到","可以替換成其他符號,如‘,這個常用于字符串的刪除操作
ciw(change inner word) : 上面的命令是刪除直到"的內容,ciw可以刪除當前光標所在的單詞(不管光
標處在單詞的什么位置)并且進入插入模式
caw(change a word) : 與change inner word 類似,但是具體的區別我google也沒有找到答案
如果各位看官知道的話麻煩在下面留言,并說明具體場景下應用的不同,多謝!
ci{(change inner {) : 同理可應用在一些被{ < " ' 包裹的代碼中,如使用 ci{ 可以刪除{}包裹
的內容并且進入插入模式。
ca{ : 也可使用ca{刪除由{}包裹的內容以及{},非常實用!!
同理可應用到sentence, block, paragraph中, 如:
dis, das, dib, dsb, dip, dsp等等
vey vep : 替換當前單詞為剪切板的單詞,首先移動到單詞首,然后vey復制,
然后移動到要替換的單詞的開頭,vep粘貼
如果光標的位置不在單詞開頭也可以這樣:
viwy viwp : 使用operator + motion的方式來選中inner word復制以及粘貼
多行操作,如多行注釋: 首先移動到要注釋的行的行首,然后Ctrl+v,移動光標選擇多行,I(大寫的i),
輸入注釋符,最后esc,此時多行被注釋。
多行縮進就相對比較簡單,首先大寫的V,然后光標選擇多行,<或者>進行縮進。
但是上面縮進的方法還是不是很方便,為何不直接<i{,可以將{替換為其他符號如:( <等
還有一個很常用的相當于一般ide里面的code format功能的縮進用法,使用==,或者對多行進行縮進,
如: 10==表示從當前行開始到下面10行自動進行縮進,而且可以自動識別語言從而給出正確的縮進格式。
使用gg=G可以對整個文件進行自動排版,使其有正確的縮進格式