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 有什么奇技淫巧?