vim的語法 -- 動作 + 指示 + 標記
vim的命令可以拆解成這樣的形式: 動詞 + 范圍限定詞 + [選項] +位置標記詞。
如dt2,:
d 刪除動作
t 直到 范圍限定詞
2 第二個選項
, 逗號位置標記詞
這樣這條命令的意思就是 刪除直到第二個逗號出現的地方
動詞
單動作動詞一般使用后立即產生效果,不需要接限定詞和位置標志
單動作動詞一般有:
i: 在光標前插入;一個小技巧:按8,再按i,進入插入模式,輸入=, 按esc進入命令模式,就會出現8個=。 這在插入分割線時非常有用,如30i+
I: 在當前行第一個非空字符前插入;
gI: 在當前行第一列插入;
a: 在光標后插入;
A: 在當前行最后插入;
o: 在下面新建一行插入;
O: 在上面新建一行插入;
x: 剪切當前光標處字符
復合動作動詞一般有:
刪除(d: delete)
復制(y: yank)
選擇(v:vision)
替換(r: replace)
粘貼(p:paste) p:在光標后粘貼, P在光標前粘貼
改變(c:change)
查找(f: find)
范圍限定詞一般有:
直到但不包括(t: till): 向后查找的直到,不包括標記; 大寫的T是向前查找; 多說一句,vim里面的大小寫對指示符號來說一般是方向的相反;
直到且包括(f: find) : 向后查找的直到,包括標記; 大寫的F是向前查找;
圍繞住(a: around)
在...中(i: in)
正則查找(/): /后面開始按照正則語法查找
位置標記詞
位置標記詞除了普通字符以外,還有一些位置標記元字符:
位置標記元字符表示該字符出現在文章中的時候,不當做普通字符處理,而作為特殊的位置標記處理,如行首、文末等。
常見的位置標記元字符有:
下一個單詞的開頭(w: word), 不忽略標點;W忽略標點
上一個單詞(本單詞)的開頭(b:back), 不忽略標點;B忽略標點
本單詞的末尾(e: end),不忽略標點, E忽略標點
段落范圍內(p: paragraph)
本行開頭(0或^)
本行末尾($)
下一行(j)
上一行(k)
往左一列(h)
往右一列(l)
全文末尾(G)
全文開頭(gg)
屏幕頂行(H:high)
屏幕底行(L:low)
屏幕中間(M:middle)
vim通過有無范圍限定詞來修飾一個位置標記詞來決定該位置標記詞是作為普通字符處理還是作為元字符來處理:
如果位置標記詞前有范圍限定詞修飾,則vim將其視作普通字符,如:
dt$: 從當前位置開始,刪除到下一個$符號出現為止;
如果上面的命令沒有范圍限定詞t的修飾,則vim會將$視作位置標記詞:
d$:從當前位置開始刪除到本行末尾
例子
iw組合起來的意思就是在當前單詞范圍里的操作, 如yiw表示復制當前單詞, diw表示刪除當前單詞, viw表示選中當前單詞等
ap組合起來就是在當前段落附近, 如vap表示選中當前段落內容, yap, dap不多說了。
c/foo: change until next occurrence of ‘foo’
fa: 查找下一個字母a並將光標移動上去;Fa:查找上一個字母a並將光標移動上去;
查找替換的語法
替換(substitute)
:[range]s/pattern/string/[c,e,g,i]5.1
| 標記 | 說明 |
|---|---|
| range | 指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表。還記得嗎? % 是目前編輯的文章,# 是前一次編輯的文章。 |
| pattern | 就是要被替換掉的字串,可以用 regexp 來表示。 |
| string | 將 pattern 由 string 所取代。 |
| c | confirm,每次替換前會詢問。 |
| e | 不顯示 error。 |
| g | globe,不詢問,整行替換。 |
| i | ignore 不分大小寫。 |
替換ref: vim替換命令
講vim語法較好的文章:
Learn to speak vim — verbs, nouns, and modifiers!
The grammar of Vim
奇技淫巧
zf 創建折行,f 表示 fold
zo 打開折行,o 表示 open
zc 關閉折行,c 表示 close
zd 刪除折行,d 表示 delete
來源:Vim 有什么奇技淫巧?
. 這個 mark 代表最后一次修改的地方,所以 `. 可以跳到最后一次修改的地方,'. 可以跳到最后一次修改的那一行。
g; 和 g, 則可以在整個 changelist 里面來回跳轉,敲 :help changelist 可以看說明。
參考:Vim 有什么奇技淫巧?
