移动光标

基本移动操作

按键 操作
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 前进到下一个访问过的目录