Vim 中的内部命令与 vi 编辑器中的内部命令类似。表 1 提供了 Vim 中的光标移动命令。
表 1. 用于移动光标的 Vim 命令
命令 | 动作 |
---|---|
h | 将光标向左移动 |
j、加号 (+)、Enter 或 Return | 将光标向下移动 |
k、减号 (-) | 将光标向上移动 |
l | 将光标向右移动 |
} | 将光标移动到当前段落的末尾 |
{ | 将光标移动到当前段落的开头 |
) | 将光标移动到当前句子的末尾 |
( | 将光标移动到当前句子的开头 |
^ | 移动到当前行的第一个非空字符 |
$ | 移动到当前行末尾 |
0 (zero) | 移动到当前行开头 |
w or W | 移动到下一单词的开头 |
b or B | 移动到上一单词的开头 |
e | 移动到下一单词的末尾 |
H | 移动到屏幕的第一行 |
M | 移动到屏幕的中间一行 |
L | 移动到屏幕的最后一行 |
G | 移动到文件末尾 |
gg | 移动到文件开头 |
:n | 移动到行 n |
表 2 显示了用于删除文本的 Vim 命令。
表 2. 用于删除文本的 Vim 命令
命令 | 动作 |
---|---|
d | 删除选中的区域 |
dd | 删除整个当前行 |
10dd | 删除从当前行开始的 10 行, |
dw | 从当前位置向前删除单词 |
db | 从当前光标位置左边开始向后删除单词 |
dl | 删除当前光标位置的字符 |
dh | 删除当前光标位置左边的字符 |
d0 (zero) | 删除当前光标位置到行开头之间的单词 |
D | d$ | 删除从当前光标位置开始的整个行 |
x | 删除光标当前位置的字符 |
X | 删除光标当前位置之前的字符 |
表 3 提供了其他几个有用的 Vim 命令。
表 3. 常用 Vim 命令
命令 | 动作 |
---|---|
ih | 进入插入模式并在当前光标处插入 |
I | 进入插入模式并在当前行的开始处插入 |
a | 进入插入模式并追加到光标后面 |
A | 进入插入模式并追加到当前行末尾 |
c | 更改选中的区域 |
C | 更改从光标当前位置开始的整个行 |
o | 在光标当前所在行下方创建一个新空行,并将光标移动到这一新空行的开头 |
O | 在光标当前所在行的上方创建一个新空行,并将光标移动到这一新空行的开头 |
r | 替换光标当前位置的单个字符 |
R | 替换从光标当前位置开始的多个字符,并在退出插入模式时结束 |
<Esc> | 退出插入或可视模式 |
> or <Tab> | 向选中区域右边缩进 |
< | 向选中区域左边缩进 |
v | 启动时突出显示字符 |
V | 启动时突出显示的整个行 |
yy | 将当前行移动/复制到内存 |
10yy | 将从当前行开始的 10 行移动/复制到内存 |
p | 粘贴复制或剪切的文本;如果字符被复制(yw dw 或 D ),就在光标当前位置之后粘贴这些字符。如果复制的是行,就在光标当前所在的行下面粘贴这些行 |
P | 作用和 p 一样,但是它在光标当前位置的前面粘贴字符,在光标当前所在行上面粘贴行 |
u | 撤消最后的更改 |
<Ctrl> R | 重做 |
/<pattern> | 搜索已找到的下一个模式,并将光标放在已找到的模式的开头 |
?<pattern> | 搜索已找到的上一个模式,并将光标放在已找到的模式的开头 |
n | 重复上一次的搜索 |
N | 重复上一次的搜索,但搜索的方向相反 |
!<cmd> | 在 Vim 会话外执行 <cmd> |
|
尽管广泛使用的是命令和插入模式,但行模式同样重要,只是有时候没有被充分理解和使用。行模式进入行编辑器,使您可以在一行或多行上处理命令。考虑到 vi 以 ex 编辑器命名,所以它只适合进入 ex 编辑器的行模式。
要从命令模式进入行模式,输入冒号(:
)即可。然后将光标移动到窗口左下角。继续输入时,所有文本都会出现在窗口底部的冒号后面。单击 Enter,开始计算和执行行模式命令。如果确定不执行在行模式下输入的行,则单击 Escape 返回到命令模式。
使用编辑器的行模式时,请记住两种命令样式。首先,在输入命令时,vi 或 Vim 按原样执行命令。如果执行的命令与修改数据有关,当前行就是目标。但是,使用第二种方法可以提供行数以处理指定的行。要输入行,请在冒号后面输入要处理的行数或行范围,并用逗号(,
)分隔开始和结束范围。
例如,如果只处理行 23,那么命令以 :23
开始。如果要修改 2319 到 3819 之间的行,则输入 :2319,3819
。要处理从行 45 开始到文件结尾之间的一个命令,需要将最后行的参数替换为美元符号($
)— 即 :45,$
。
以下命令只是可以在行模式下执行的最基本命令:
:w <file name>
:将文件写入磁盘。如果提供一个参数,编辑器会试图将数据写入 <file name>。注意:如果提供一个参数,而且存在 <file name>,编辑器不会覆盖现有文件的数据。
:w! <file name>
:将文件写入磁盘并覆盖文件中的所有数据。:<x>,<y> w <file name>
:将从 <x> 到 <y> 之间的行写入 <file name>。:q
:试图在不保存的情况下退出编辑器。注意:如果数据已修改,则需要先保存文件再退出编辑器,否则将导致文件未被保存。
:q!
:退出编辑器,不将文件写入磁盘。:n
:如果编辑多个文件,首先编辑编辑列表中的下一个文件。:e <file name>
:编辑 <file name>。:e#
:如果编辑两个文件,则在两个文件之间切换。:s/<str1>/<str2>/
:用当前行中的 <str2> 替换第一次出现的 <str1>。:1,$ s/<str1>/<str2>/g
:从行 1 开始,在整个文件中执行,用 <str2> 替换所有的 <str1>。:r <file name>
:将 <file name> 读入当前编辑器会话中。:<x>,<y> d
:删除从 <x> 到 <y> 之间的行。:<x>,<y> y
:复制从 <x> 到 <y> 之间的行。