单词移动
w 把光标向前移动一个单词(可以使用数字前缀)
b 把光标向前移动一个单词(可以使用数字前缀)
移动到一行的开始或结束
$ 移动光标到行尾
其也支持数字参数,例如
1$ 移动到第一行尾(你光标所在的行),2$移动到下一行
^ 移动到第一个非空字符
0 移动到行首
在单一行搜索
- fx 命令向后查询单一的字符x(可以使用数字前缀)
- Fx 命令向前查询单一的字符x(可以使用数字前缀)
- tx命令向后查询单一的字符x,只不过停留在搜索字符串的前一个字符 (可以使用数字前缀)
- Tx命令向前查询单一的字符x,只不过停留在搜索字符串的前一个字符 (可以使用数字前缀)
取消当前命令
如果键入了f但是又不想搜索了,键入<Esc> 也就是 f<Esc>来取消查找命令,这样你就可以继续执行别的命令了。
移动至指定行
nG
如果你是一个C或者C++程序员,你经常遇到如下的错误:
prog.c:3: 'j' undeclared(first use in this function)
这告诉你你将要在行3修理一些东西,你怎样找到行3呢?
第一种方式是 9999k 移动到文件的第一行,然后键入 2j 。这不是一个好的方法,但是他工作了
最好的办法是使用G命令 => 3G
我在哪里
Ctrl + G
此命令展示了一个状态行展示了你在哪个文件,例如:
"c02.txt" [Modified] line 81 of 153 -- 52% -- col 1
向下和向下滚动(Scrolling Up and Down)
Ctrl-U 上向滚动了半个屏幕
Ctrl-D 上下滚动了半个屏幕
删除文本
事实上d命令可以跟随任何移动的命令(dmotion)
- dw 删除一个单词

- d$ D删除光标处到行尾

3dw 或 d3w
3dw, d3w 都会删除3个单词。如果你想知道其具体的意思
第一个命令 3dw 删除一个单词,重复三次
第二个命令 d3w 一次删除三个命令
你可以把这两个模式组合起来(例如,3d2w)。此命令删除二个单词,重复三次,总共6个单词。
改变文本
c命令 更改文本(cmotion)。
他工作时像d命令,除了他把你留在插入模式。例如,cw更改单词。更具体来讲,他删除一个单词,然后把你放在插入模式。
cw与dw的唯一不同是。cw删除文本到其空格处,dw删除单词和其后的空格cc
删除一整行,然后进入插入模式
.命令
. 命令
. 命令是最简单但非常强大的命令在Vim中。他重复最后一次的删除或改变命令。

连接行 (Joining Lines)
J
J命令连接当前行和下一行。一个空格会被添加在第一行的行尾来分割连接的二行。如果指定了数量,指定数量的行会被连接

替换字符
rx
rx 把光标所在的字符替换为x. Figure 2.15展示了怎么使用r命令来把z替换为s
r命令前面可以具有数量,表示替换的字符的数量。在Figure2.16,我们前往行首(^字符)并执行5ra把前5个字符替换为a

注意
r命令以特殊的方式对待<Enter>。无论数量有多大,仅会插入一个<Enter>。因此,5ra插入5个a字符,而5r<Enter>用<Enter>替换5个字符
5rx用字符x替换5个字符,而r5x用5替换当前光标的字符然后删除一个字符(x)
改变大小写
~
改变字符的大小写。他把大写字符变为小写,反之亦然。如果指定了数量,指定数量的字符会被改变。Figure 2.17 包含了例子。

按键宏指令 (Keyboard Macros)
.命令重复前面的更改。但是你想做一些更复杂的动作而不是一个单一的更改?这就是引入按键宏指令的原因。qcharacter以字符(a-z)记录你的击键。
完成记录,仅键入q命令。你可以执行宏通过键入@character命令(可以在命令前指定一个数量,将导致指被执行多次)
让我们看一下如何在实践中使用这些命令。你有一系列的文件名像下面这样:
stdio.h
fcnt1.h
unistd.h
stdlib.h
但是你想要下面这样的:
#include "stdio.h"
#include "fcnt1.h"
#include "unistd.h"
#include "stdlib.h"
你开始通过通过把光标移动到第一行的第一个字符。接下来执行下面的命令:

现在你作了一次这样的工作,你可以重复这样的改变通过命令@a。可选的,因为你要更改3行,你可以使用3@a改变他们。
Figure 2.18 展示了怎样定义和执行一个宏指令
