移动光标
基本移动操作
按键 |
操作 |
h |
左移 |
j |
下移 |
k |
上移 |
l |
右移 |
移动到单词边界、锚位
按键 |
操作 |
w |
移动到下个单词开头 |
e |
移动到下个单词结尾 |
b |
移动到上个单词开头 |
0 |
移动到行首 |
^ |
移动到行首的非空白符 |
$ |
移动到行尾 |
行间移动
按键 |
操作 |
gg |
移动到文件第一行 |
G |
移动到文件最后一行 |
{number}G |
移动到第number行 |
搜索移动
按键 |
操作 |
f{char} |
移动到字符char下次出现的位置 |
F{char} |
移动到字符char上次出现的位置 |
t{char} |
移动到字符char下次出现的位置的前一个字符 |
T{char} |
移动到字符char上次出现的位置的后一个字符 |
; |
重复之前的f、F、t、T操作 |
, |
反向重复之前的f、F、t、T操作 |
跳转
按键 |
操作 |
|
% |
跳转到配对的符号 |
|
} |
跳转到下一个段落 |
(当编辑代码时则为函数/代码块) |
{ |
跳转到上一个段落 |
(当编辑代码时则为函数/代码块) |
标记
按键 |
操作 |
m{mark} |
设置当前位置为标记mark |
`{mark} |
跳转到标记mark的位置 |
编辑文本
插入文本
按键 |
操作 |
i |
在光标前进入插入模式 |
I |
在行首进入插入模式 |
a |
在光标后进入插入模式 |
A |
在行尾进入插入模式 |
o |
在当前行之下另起一行,进入插入模式 |
O |
在当前行之上另起一行,进入插入模式 |
Esc |
退出插入模式 |
替换文本
按键 |
操作 |
r |
用一个字符替换当前光标下的字符 |
gr |
用一个字符虚拟替换当前光标下的字符 |
s |
删除当前字符,然后进入插入模式 |
R |
进入替换模式 |
gR |
进入虚拟替换模式 |
Note:在虚拟替换模式中,Vim是按屏幕上实际显示的宽度来替换字符的,而不是按文件中所保存的字符进行替换。有时候虚拟替换在处理<Tab>
等特殊符号时十分有用。
剪切、复制 、粘贴
按键 |
操作 |
x |
剪切当前字符 |
dd |
剪切当前行 |
yy |
复制当前行 |
p |
在光标后粘贴 |
P |
在光标前粘贴 |
寄存器
名称 |
用途 |
"" |
缺省使用的无名寄存器 |
"[a-z] |
有名寄存器 |
"0 |
复制专用寄存器 |
"+ |
系统剪切板 |
"= |
表达式寄存器 |
"_ |
黑洞寄存器 |
"% |
该寄存器记录了当前文件名 |
": |
该寄存器记录了上次执行的Ex命令 |
". |
该寄存器记录了上次插入的文本 |
"/ |
该寄存器记录了上次查找的模式 |
Note:可使用:registers
命令查看当前已定义的所有寄存器
“执行、重复、回退”范式
简单的 重复/回退 操作
按键 |
操作 |
. |
重复执行上一次修改 |
u |
撤销上一次修改 |
<Ctrl> + r |
重做最近被撤销的更改 |
实用的 重复/回退 操作
目的 |
操作 |
重复 |
回退 |
在行内查找下一指定字符 |
f{char}/t{char} |
; |
, |
在行内查找上一指定字符 |
F{char}/T{char} |
; |
, |
在文档中查找下一处匹配项 |
/pattern<CR> |
n |
N |
在文档中査找上一处匹配项 |
?pattern<CR> |
n |
N |
执行替换 |
:s/target/replacement |
& |
u |
执行一系列修改 |
q{register}{edits}q |
@{register} |
u |
宏
按键 |
操作 |
q{register} |
在寄存器register中录制宏 |
q |
停止录制宏 |
@{register} |
执行寄存器register中的宏 |
@@ |
重新执行上一次执行的宏 |
可视模式
选择文本
按键 |
操作 |
v |
进入可视化模式(字符粒度) |
V |
进入可视化模式(行粒度) |
<Ctrl> + v |
进入可视化模式(列选择) |
o |
切换光标到选择区开头/结尾 |
gv |
重选上次的高亮选区 |
Esc |
退出可视化模式 |
操作被选中的文本
按键 |
操作 |
> |
向右缩进 |
< |
向左缩进 |
d |
剪切 |
y |
复制 |
~ |
大小写切换 |
命令行模式
基本操作
命令 |
操作 |
:w[rite] |
保存 |
:q[uit] |
退出(修改未保存时警告) |
:q[uit]! |
不保存强制退出 |
打开文件
命令 |
操作 |
:e[dit] {filepath} |
打开路径下的文件 |
:find {filename} |
遍历’path’选项值中的目录,找到文件名匹配的文件并打开 |
Note:按<Tab>
键可以自动补全文件路径或文件名。当有多个匹配时,按<Tab>
键后参数值会自动展开为第一个候选文件的完整路径,此时可以再按一次<Tab>
键切换到下一个路径。
查找
命令 |
操作 |
/{pattern} |
查找pattern |
?{pattern} |
向上查找pattern |
\v{pattern} |
查找pattern(激活very magic模式) |
n |
查找下一个 |
N |
反向查找下一个 |
编辑
命令 |
操作 |
:[range] s[ubstitute]/{pattern}/{string}/[flags] |
把指定范围内的出现{pattern}的地方替换为{string} |
:[range] d[elete] [x] |
删除指定范围内的行到寄存器x中 |
:[range] y[ank] [x] |
复制指定范围的行到寄存器x中 |
:[range] co[py] {address} |
把指定范围内的行拷贝到{address}所指定的行之下 |
:[range] m[ove] {address} |
把指定范围内的行移动到{address}所指定的行之下 |
:[range] j[oin] |
连接指定范围内的行 |
:[range] norm[al] {command} |
对指定范围内的每一行执行普通模式命令 |
:[range] g[lobal]/{pattern}/{ex-command} |
对指定范围内匹配{pattern}的所有行,在其上执行Ex命令 |
Note:[range]
和{address}
与sed中的“address”类似,可以由行号和正则表达式构成,末尾可以加上行偏移
管理多个文件
管理缓冲区列表
命令 |
操作 |
:ls |
列出缓冲区列表 |
:bp[revious] |
编辑上一个缓冲区 |
:bn[ext] |
编辑下一个缓冲区 |
:bfirst |
跳转到第一个缓冲区 |
:blast |
跳转到最后一个缓冲区 |
:bufdo {cmd} |
对每个缓冲区执行命令 |
管理参数列表
命令 |
操作 |
:args |
列出参数列表 |
:args {arglist} |
对参数列表进行赋值 |
:prev[ious] |
编辑上一个文件 |
:next |
编辑下一个文件 |
:first |
开始编辑第一个文件 |
:last |
开始编辑最后一个文件 |
:argdo {cmd} |
对每个文件执行命令 |
窗口与标签页
分割窗口
按键 |
操作 |
<Ctrl> + w s |
水平分割当前窗口,新窗口仍显示当前缓冲区 |
<Ctrl> + w v |
竖直分割当前窗口,新窗口仍显示当前缓冲区 |
:sp[lit] {file} |
水平分割当前窗口,并在新窗口中载入文件 |
:vsp[lit] {file} |
竖直分割当前窗口,并在新窗口中载入文件 |
切换窗口
按键 |
操作 |
<Ctrl> + w w |
在窗口间循环切换 |
<Ctrl> + w h |
切换到左边的窗口 |
<Ctrl> + w j |
切换到下边的窗口 |
<Ctrl> + w k |
切换到上边的窗口 |
<Ctrl> + w l |
切换到右边的窗口 |
关闭窗口
命令 |
按键 |
操作 |
:clo[se] |
<Ctrl> + w c |
关闭活动窗口 |
:on[ly] |
<Ctrl> + w o |
只保留活动窗口,关闭其他所有窗口 |
管理标签页
命令 |
按键 |
操作 |
:tabe[dit] {file} |
|
在新标签页中编辑文件 |
:tabc[lose] |
|
关闭当前标签页 |
:tabo[nly] |
|
只保留活动标签页,关闭其他所有标签页 |
:tabn[ext] {N} |
{N}gt |
切换到编号为N的标签页 |
:tabn[ext] |
gt |
切换到下一个标签页 |
:tabp[revious] |
gT |
切换到上一个标签页 |
netrw插件
打开文件管理器
命令 |
操作 |
:e[dit] {path} |
打开文件管理器,并显示指定目录 |
:E[xplore] |
打开文件管理器,并显示活动缓冲区所在的目录 |
文件管理器窗口中的操作
按键 |
操作 |
Enter |
打开光标下的文件/目录 |
- |
访问上一层目录 |
u |
返回到上一个访问过的目录 |
U |
前进到下一个访问过的目录 |