下面列取的命令是我最常用到到,但只是vim支持命令的一部分。
1. 模式
- normal (esc) : 其它模式下按 esc 键可以切换到 normal 模式
- i nsert :在 normal 模式或 visual 模式下,按 i/I/a/A/c 等等一些键可以切换到 insert 模式
- v isual : 在 normal 模式下按 v 切换到 visual 模式
- r eplace :在 normal 模式下按 r/R 切换到 replace 模式
综上可以看出,normal 模式是基本模式,可以方便到切换到另外到三种模式。
2. 移动
h或退格: 左移一个字符;
l或空格: 右移一个字符;
j: 下移一行;
k: 上移一行;
[Word]
w: 前移一个单词,光标停在下一个单词开头;
W: 移动下一个单词开头,但忽略一些标点;
[End]
e: 前移一个单词,光标停在下一个单词末尾;
E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;
[Back]
b: 后移一个单词,光标停在上一个单词开头;
B: 移动到上一个单词开头,忽略一些标点;
(: 前移1句。
): 后移1句。
{: 前移1段。
}: 后移1段。
[Find]
fc: 把光标移到同一行的下一个c字符处
Fc: 把光标移到同一行的上一个c字符处
tc: 把光标移到同一行的下一个c字符前
Tc: 把光标移到同一行的上一个c字符后
;: 配合f & t使用,重复一次
,: 配合f & t使用,反向重复一次
0: 移动到行首。
^: 移动到本行第一个非空白字符。
$: 移动到行尾。
n|: 把光标移到n列上。
nG: 到文件第n行。
H: [high]把光标移到屏幕最顶端一行。
M: [middle]把光标移到屏幕中间一行。
L: [low]把光标移到屏幕最底端一行。
gg: 到文件头部。
G: 到文件尾部。
3 翻屏
ctrl+f: [forward]下翻一屏。
ctrl+b: [back]上翻一屏。
ctrl+d: [down]下翻半屏。
ctrl+u: [up]上翻半屏。
zz: 将当前行移动到屏幕中央。
zt: [top]将当前行移动到屏幕顶端。
zb: [botom]将当前行移动到屏幕底端。
4 标记[mark]
m{a-z}: 标记光标所在位置,局部标记,只用于当前文件。
m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。`{a-z}: 移动到标记位置。
'{a-z}: 移动到标记行的行首。
`{0-9}:回到上\[2-10\]次关闭vim时最后离开的位置。
``: 移动到上次编辑的位置。
:marks 显示所有标记。
:delmarks a b -- 删除标记a和b。
:delmarks a-c -- 删除标记a、b和c。
:delmarks! -- 删除当前缓冲区的所有标记。
5 插入
!!插入命令配合数字,可以成倍执行。
[insert]
i: 在光标前插入;
I: 在当前行第一个非空字符前插入;
gI: 在当前行第一列插入;
[add]
a: 在光标后插入;
A: 在当前行最后插入;
[open]
o: 在下面新建一行插入;
O: 在上面新建一行插入;
[replace]
:r filename在当前位置插入另一个文件的内容。
:r !date 在光标处插入当前日期与时间。
:r !command可以将其它shell命令的输出插入当前文档。
[change]
c\[n\]w: 改写光标后1(n)个词。
c\[n\]l: 改写光标后n个字母。
c\[n\]h: 改写光标前n个字母。
\[n\]cc: 修改当前\[n\]行。
ci{: [change in]对{}内的所有词改写。'{'可以更换为其它成对的符号,例如'"','('等。
caw: [change a word]改变光标所在单词。
[switch]
\[n\]s: 以输入的文本替代光标之后1(n)个字符,相当于c\[n\]l。
\[n\]S: 删除指定数目的行,并以所输入文本代替之。
6 剪切/粘贴/拷贝
[ctrl + x]
\[n\]x: 剪切光标右边n个字符,相当于d\[n\]l。
\[n\]X: 剪切光标左边n个字符,相当于d\[n\]h。
[yank]
y: 复制在可视模式下选中的文本。
yy: 复制整行文本。
y\[n\]w: 复制一(n)个词。
y\[n\]l: 复制光标右边1(n)个字符。
y\[n\]h: 复制光标左边1(n)个字符。
y\$: 从光标当前位置复制到行尾。
y0: 从光标当前位置复制到行首。
ygg: 复制光标以上的所有行。
yG: 复制光标以下的所有行。
yaw和yas:复制一个词和复制一个句子,即使光标不在词首和句首也没关系。
[delete]
d: 删除(剪切)在可视模式下选中的文本。
d$ or D: 删除(剪切)当前位置到行尾的内容。
d\[n\]w: 删除(剪切)1(n)个单词。
d\[n\]l: 删除(剪切)光标右边1(n)个字符。
d\[n\]h: 删除(剪切)光标左边1(n)个字符。
d0: 删除(剪切)当前位置到行首的内容。
\[n\] dd: 删除1(n)行。
d1G或dgg: 剪切光标以上的所有行。
dG: 剪切光标以下的所有行。
daw和das:剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
[paste]
p: 在光标之后粘贴。
P: 在光标之前粘贴。
7 文本对象
aw:[a word]一个词。
as:[a sentence]一句。
ap:[a paragraph]一段。
ab:[a block]一块(包含在圆括号中的)。
y/d/c/v 都可以接一个对象。此外还能接f/F/t/T等查找命令。
8 寄存器
a-z:都可以用作寄存器名。
"ayy把当前行的内容放入a寄存器。
A-Z:用大写字母索引寄存器,可以在寄存器中追加内容。 如"Ayy把当前行的内容追加到a寄存器中。
:reg 显示所有寄存器的内容。
"+:系统剪贴板。
"+yy:把当前行的内容放入系统剪贴板。