以字为单位的移动
h 向左移动一个字
j 向下移动一行
k 向上
l 向右
以词为单位的移动
w 下一個word w(ord)
W 下一個word(跳过标点)
b 前一個word b(ackward)
B 前一个word(跳过标点)
e 跳到当前word的尾端 e(nd)
行移动
0 跳到当前行的开头 - ^ 跳到当前行第一个非空字符 - $ 跳到行尾
助记:0(第0个字符), ^ 和 $ 含义同正则表达式
段落移动
- { 上一段(以空白行分隔) - } 下一段(以空白行分隔) - % 跳到当前对应的括号上(适用各种配对符号)
跳跃移动
/xxxx 搜索xxxx,然后可以用 n 下一个, N 上一个移动 - # 向前搜索光标当前所在的字 - * 向后搜索光标当前所在的字
fx 在当前行移动到光标之后第一个字符x的位置 f(ind)x
gd 跳到光标所在位置词(word)的定义位置 g(o)d(efine)
gg 到文档顶部
G 到文档底部
:x 跳到第x行(x是行号)
ctrl+d 向下翻页 d(down)
ctrl+u 向上翻页 u(p)
基本编辑
修改
i 在光标当前位置向前插入 i(nsert)
I 在本行第一个字符前插入
a 在光标当前位置向后插入 a(fter)
A 在本行末尾插入
o 向下插入一行
O 向上插入一行
:w 保存
:q 退出
:wq 保存并退出
删除
x 删除当前字符
dd 删除当前行 d(elete)
dw 删除当前光标下的词 d(elete)w(ord)
复制粘贴
yy 复制当前行 y(ank)
yw 复制当前光标下的词 y(ank)w(ord)
p 粘贴 p(aste)
P 粘贴在当前位置之前
进阶操作
限于篇幅,在这里我仅介绍下我非常常用的几个操作。
重复操作
因为VIM所有的操作都是原子化的,所以把这些操作程序化就非常简单了:
5w 相当于按五次 w 键;
6j 下移6行,相当于按六次j;
3J 大写J,本来是将下一行与当前行合并,加上数量,就是重复操作3次;
6dw 和 d6w 结果是一样,就是删除6个word; - 剩下的无数情况,自己类推吧。
高效编辑
di" 光标在”“之间,则删除”“之间的内容
yi( 光标在()之间,则复制()之间的内容
vi[ 光标在
以上三种可以自由组合搭配,效率奇高,i(nner)
dtx 删除字符直到遇见光标之后的第一个 x 字符
ytx 复制字符直到遇见光标之后的第一个 x 字符
标记和宏(macro)
ma 将当前位置标记为a,26个字母均可做标记, mb 、 mc 等等;
'a 跳转到a标记的位置; - 这是一组很好的文档内标记方法,在文档中跳跃编辑时很有用;
qa 将之后的所有键盘操作录制下来,直到再次在命令模式按下 q ,并存储在 a 中;
@a 执行刚刚记录在 a 里面的键盘操作;
@@ 执行上一次的macro操作;
宏操作是VIM最为神奇的操作之一,需要慢慢体会其强大之处;
共 62 条评论