以 :
和 /
开头的命令都有历史纪录,可以首先键入 :
或 /
然后按上下箭头来选择某个历史命令
启动
命令 |
功能 |
vim |
启动 Vim |
vim filename |
打开 Vim 并创建名为 filename 的文件 |
操作
命令 |
功能 |
vim file |
打开 file 文件 |
vim file1 file2 file3 ... |
同时打开多个文件 |
:open file |
在 Vim 窗口中打开一个新文件 |
:split file |
在新窗口中打开文件 |
:bn |
切换到下一个文件 |
:bp |
切换到上一个文件 |
:args |
查看当前打开的文件列表,当前正在编辑的文件会用 [] 括起来 |
:e path |
打开远程文件 |
:set nu |
显示行号 |
模式
命令 |
功能 |
Esc 或
Ctrl +[
|
正常模式 (左下角为空或显示文件名) |
i |
插入模式 (左下角显示 --INSERT--) |
v |
可视模式 (左下角显示 --VISUAL--) |
光标
注: 大部分命令前面都可跟数字
命令 |
功能 |
h |
向左移一个字符 |
j |
向下移一行 |
k |
向上移一行 |
l |
向右移一个字符 |
G |
移到文件的最后一行 |
w |
移到下一个字的开头 |
W |
移到下一个字的开头,忽略标点符号 |
b |
移到前一个字的开头 |
B |
移到前一个字的开头,忽略标点符号 |
L |
移到屏幕的最后一行 |
M |
移到屏幕的中间一行 |
H |
移到屏幕的第一行 |
e |
移到下一个字的结尾 |
E |
移到下一个字的结尾,忽略标点符号 |
( |
移到句子的开头 |
) |
移到句子的结尾 |
{ |
移到段落的开头 |
} |
移到下一个段落的开头 |
0 |
移到当前行的第一列 |
^ |
移到当前行的首个非空字符 |
$ |
移到当前行的最后一个字符 |
+ |
移到下一行的首个非空字符 |
- |
移到上一行的首个非空字符 |
添加
命令 |
功能 |
a |
在光标后插入文本 |
A |
在当前行插入文本 |
i |
在光标前插入文本 |
I |
在当前行前插入文本 |
o |
在当前行的下边插入新行 |
O |
在当前行的上边插入新行 |
s |
删除光标所在处字符,并进入插入模式 |
S |
删除光标所在的行,并进入插入模式 |
:r file |
读入文件 file 内容,并插在当前行后 |
:nr file |
读入文件 file 内容,并插在第 n 行后 |
Esc |
回到命令模式 |
^v char |
插入时忽略 char 的指定意义,这是为了插入特殊字符 |
删除
- 输入
:set nu
显示行号
- 比如要删除 30-50 行:
:30,50d
命令 |
功能 |
x |
删除光标处的字符 |
dw |
删至下一个字的开头 |
dG |
删除行,直到文件结束 |
dd |
删除整行 |
db |
删除光标前面的字 |
:n,md |
从第 m 行开始往前删除 n 行 |
d, d$ |
从光标处删除到行尾 |
^h, backspace |
插入时,删除前面的字符 |
^w |
插入时,删除前面的字 |
修改
命令 |
功能 |
r char |
用 char 替换当前字符 |
R text escape |
用 text 替换当前字符直到按下 Esc 键 |
stext escape |
用 text 代替当前字符 |
S 或 cctext escape
|
用 text 代替整行 |
cwtext escape |
将当前字改为 text |
Ctext escape |
将当前行余下的改为 text |
cG escape |
修改至文件的末尾 |
ccursor_cmd text escape |
从当前位置处到光标命令位置处都改为 text |
查找与替换
命令 |
功能 |
/text |
在文件中向前查找 text |
?text |
在文件中向后查找 text |
n |
在同一方向重复查找 |
N |
在相反方向重复查找 |
ftext |
在当前行向前查找 text |
Ftext |
在当前行向后查找 text |
ttext |
在当前行向前查找 text,并将光标定位在 text 的第一个字符 |
Ttext |
在当前行向后查找 text,并将光标定位在 text 的第一个字符 |
:set ic |
查找时忽略大小写 |
:set noic |
查找时对大小写敏感 |
:ranges/pat1/pat2/g |
用 newtext 替换 oldtext |
:m,ns/oldtext/newtext |
在 m 行通过 n,用 newtext 替换 oldtext |
& |
重复最后的 :s 命令 |
:g/text1/s/text2/text3 |
查找包含 text1 的行,用 text3 替换 text2 |
:g/text/command |
在所有包含 text 的行运行 command 所表示的命令 |
:v/text/command |
在所有不包含 text 的行运行 command 所表示的命令 |
复制
注: cmd 终端可直接用鼠标操作: 左键选中, 右键粘贴
- 按
v
进入可视模式
- 移动方向键选择复制区域
- 按
y
复制, 按 p
粘贴
-
esc
退出可视模式
命令 |
功能 |
yy |
将当前行的内容放入临时缓冲区 |
nyy |
将 n 行的内容放入临时缓冲区 |
p |
将临时缓冲区中的文本放入光标后 |
P |
将临时缓冲区中的文本放入光标前 |
"(a-z)nyy |
复制 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行 |
"(a-z)ndd |
删除 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行 |
"(a-z)p |
将名字为圆括号的可命名缓冲区的内容放入当前行后 |
"(a-z)P |
将名字为圆括号的可命名缓冲区的内容放入当前行前 |
撤消与重复
命令 |
功能 |
u |
撤消最后一次修改 |
U |
撤消当前行的所有修改 |
. |
重复最后一次修改 |
, |
以相反的方向重复前面的 f、F、t 或 T 查找命令 |
; |
重复前面的 f、F、t 或 T 查找命令 |
"np |
取回最后第 n 次的删除(缓冲区中存有一定次数的删除内容,一般为 9) |
n |
重复前面的 / 或 ? 查找命令 |
N |
以相反方向重复前面的 / 或 ? 命令 |
保存与退出
命令 |
功能 |
:w |
保存文件但不退出 vi |
:w file |
将修改保存在 file 中但不退出 vi |
:wq 或 ZZ 或 :x
|
保存文件并退出 vi |
:q! |
不保存文件,退出 vi |
:e! |
放弃所有修改,从上次保存文件开始再编辑 |
选项
命令 |
功能 |
:set all |
打印所有选项 |
:set nooption |
关闭 option 选项 |
:set nu |
每行前打印行号 |
:set showmode |
显示是输入模式还是替换模式 |
:set autoindent |
继承前一行的缩进方式,特别适用于多行注释 |
:set smartindent |
为C程序提供自动缩进 |
:set list |
显示制表符(^I)和行尾符号 |
:set ts=8 |
为文本输入设置 tab stops |
:set window=n |
设置文本窗口显示 n 行 |
:set number |
显示行数 |
:set nonumber |
取消显示行数 |
状态
命令 |
功能 |
:.= |
打印当前行的行号 |
:= |
打印文件中的行数 |
ctrl+g |
显示文件名、当前的行号、文件的总行数和文件位置的百分比 |
:l |
使用字母 "l" 来显示许多的特殊字符,如制表符和换行符 |
光标与屏幕
命令 |
功能 |
H |
将光标移动到屏幕的顶行 |
nH |
将光标移动到屏幕顶行下的第 n 行 |
M |
将光标移动到屏幕的中间 |
L |
将光标移动到屏幕的底行 |
nL |
将光标移动到屏幕底行上的第 n 行 |
^e(ctrl+e) |
将屏幕上滚一行 |
ctrl+y |
将屏幕下滚一行 |
ctrl+u |
将屏幕上滚半页 |
ctrl+d |
将屏幕下滚半页 |
ctrl+b |
将屏幕上滚一页 |
ctrl+f |
将屏幕下滚一页 |
ctrl+l |
重绘屏幕 |
z-return |
将当前行置为屏幕的顶行 |
nz-return |
将当前行下的第 n 行置为屏幕的顶行 |
z. |
将当前行置为屏幕的中央 |
nz. |
将当前行上的第 n 行置为屏幕的中央 |
z- |
将当前行置为屏幕的底行 |
nz- |
将当前行上的第 n 行置为屏幕的底行 |
shell 转义命令
命令 |
功能 |
:!command |
执行 shell 的 command 命令,如 :!ls |
:!! |
执行前一个 shell 命令 |
:r!command |
读取 command 命令的输入并插入,如 :r!ls 会先执行 ls,然后读入内容 |
:w!command |
将当前已编辑文件作为 command 命令的标准输入并执行 command 命令,如 :w!grep all |
:cd directory |
将当前工作目录更改为 directory 所表示的目录 |
:sh |
将启动一个子 shell,使用 ^d(ctrl+d) 返回 vi |
:so file |
在 shell 程序 file 中读入和执行命令 |
缩进
命令 |
功能 |
ctrl+i或 tab |
插入文本时,插入移动的宽度,移动宽度是事先定义好的 |
:set ai |
打开自动缩进 |
:set sw=n |
将移动宽度设置为 n 个字符 |
n> |
使 n 行都向右移动一个宽度,例如 3>> 就将接下来的三行每行都向右移动一个移动宽度 |