说在前面
本文只是个人在学习 NeoVim 操作中进行的一些总结,肯定会有总结不全面的地方,如果需要全面的了解 NeoVim 的键盘操作,可以访问官方的文档:
- 官方网站:https://neovim.io/
- 官方文档:https://neovim.io/doc/user/
- 官方使用指南:https://neovim.io/doc/user/usr_toc/
- 官方快捷键表:https://neovim.io/doc/user/vimindex/
- 官方速查表:https://neovim.io/doc/user/quickref/
模式概述
NeoVim 的核心设计理念是模式编辑。不同的模式下,键盘按键有不同的含义。
| 模式 | 名称 | 说明 | 退出方式 |
|---|---|---|---|
| NORMAL | 普通模式 | 默认模式,用于导航和操作文本 | 按 Esc 从其他模式返回 |
| INSERT | 插入模式 | 输入文本 | 按 Esc 返回普通模式 |
| VISUAL | 可视模式 | 选择文本区域 | 按 Esc 或 v 返回普通模式 |
| REPLACE | 替换模式 | 覆盖方式输入文本 | 按 Esc 返回普通模式 |
| COMMAND-LINE | 命令模式 | 输入命令(如 :w 保存) | 按 Esc 或 Enter 执行后返回 |
| TERMINAL | 终端模式 | 在 NeoVim 内置终端中操作 | Ctrl+\ Ctrl+n 返回普通模式 |
模式切换快捷键
| 快捷键 | 作用 | 目标模式 |
|---|---|---|
Esc | 返回普通模式 | NORMAL |
i | 在光标前插入 | INSERT |
a | 在光标后插入 | INSERT |
I(Shift+i) | 在行首插入 | INSERT |
A(Shift+a) | 在行尾插入 | INSERT |
o | 在下方新建一行插入 | INSERT |
O(Shift+o) | 在上方新建一行插入 | INSERT |
v | 进入可视模式(字符级) | VISUAL |
V(Shift+v) | 进入可视行模式(行级) | VISUAL |
Ctrl+v | 进入可视块模式(列级) | VISUAL |
r | 进入替换模式(只替换一个字母) | REPLACE |
R(Shift+v) | 进入替换模式 | REPLACE |
: | 进入命令行模式 | COMMAND-LINE |
/ 或 ? | 进入搜索模式 | COMMAND-LINE |
Ctrl+l | 清空搜索高亮并刷新屏幕(普通模式) | - |
Ctrl+z | 挂起 NeoVim(返回终端,用 fg 恢复) | - |
光标移动
基本移动
| 快捷键 | 作用 |
|---|---|
h | 向左移动一个字符 |
j | 向下移动一行 |
k | 向上移动一行 |
l | 向右移动一个字符 |
w | 移动到下一个单词的开头 |
b | 移动到当前/上一个单词的开头 |
e | 移动到当前/下一个单词的结尾 |
ge | 移动到上一个单词的结尾 |
0 | 移动到行首(第一个字符) |
^ | 移动到行首第一个非空白字符 |
_ | 移动到当前行的第一个非空白字符(同 ^) |
g_ | 移动到当前行的最后一个非空白字符 |
$ | 移动到行尾 |
gg | 移动到文件开头 |
G | 移动到文件结尾 |
:n 或 nG | 移动到第 n 行 |
单词移动的变体
W、B、E:以空白字符分隔的广义单词移动(忽略标点符号)
示例:
foo.bar(baz)中,w会停在.和(处,W会一次性跨过整个foo.bar(baz)
屏幕移动
| 快捷键 | 作用 |
|---|---|
Ctrl+f | 向下翻一页(forward) |
Ctrl+b | 向上翻一页(backward) |
Ctrl+d | 向下翻半页(down) |
Ctrl+u | 向上翻半页(up) |
H | 移动到屏幕顶部(High) |
M | 移动到屏幕中部(Middle) |
L | 移动到屏幕底部(Low) |
zt | 将当前行置于屏幕顶部 |
zz | 将当前行置于屏幕中央 |
zb | 将当前行置于屏幕底部 |
跳转历史
| 快捷键 | 作用 |
|---|---|
Ctrl+o | 跳转到上一个位置 |
Ctrl+i | 跳转到下一个位置 |
''(两个单引号) | 跳转到上一次光标所在行 |
` `(两个反引号) | 跳转到上一次光标精确位置 |
文本编辑
删除(Delete)
| 快捷键 | 作用 |
|---|---|
x | 删除光标处的字符 |
X | 删除光标前的字符 |
dd | 删除整行 |
D | 从光标位置删除到行尾 |
dw | 删除到当前单词结尾(包括空格) |
daw | 删除当前单词(delete around word) |
diw | 删除当前单词(delete inner word,不包括周围空格) |
d$ | 同 D |
d0 | 从光标位置删除到行首 |
dgg | 从光标删除到文件开头 |
dG | 从光标删除到文件结尾 |
此处的删除操作同时都伴随着把删除的文本放入缓存区,所以此处的删除更像是 “剪切” 操作
如果想要不保存到缓存区,则需要在配置里自行编写快捷键。
修改(Change)
| 快捷键 | 作用 |
|---|---|
c | 修改(删除后进入插入模式) |
cc | 修改整行 |
C | 从光标位置修改到行尾 |
cw | 修改到单词结尾 |
ciw | 修改当前单词(inner word) |
ci" | 修改双引号内的内容 |
ci( 或 cib | 修改括号内的内容 |
ci[ | 修改方括号内的内容 |
ci{ 或 ciB | 修改花括号内的内容 |
cit | 修改 XML/HTML 标签内的内容 |
ct + 字符 | 修改到指定字符之前 |
cf + 字符 | 修改到指定字符(包括该字符) |
此处的修改操作同时都伴随着把删除的文本放入缓存区
如果想要不保存到缓存区,则需要在配置里自行编写快捷键。
插入
| 快捷键 | 作用 |
|---|---|
i | 光标前插入 |
a | 光标后插入 |
I | 行首插入 |
gI | 在行首第一个非空白字符处插入 |
A | 行尾插入 |
o | 下方新建行插入 |
O | 上方新建行插入 |
gi | 在最后一次插入的位置插入 |
复制与粘贴
| 快捷键 | 作用 |
|---|---|
y | 复制(yank) |
yy 或 Y | 复制整行 |
yw | 复制到单词结尾 |
yiw | 复制当前单词 |
y$ | 复制到行尾 |
y0 | 复制到行首 |
p | 在光标后粘贴(paste) |
P | 在光标前粘贴 |
gp | 粘贴并将光标移动到粘贴内容末尾 |
gP | 在光标前粘贴,光标移动到末尾 |
"+y | 复制到系统剪贴板(Windows) |
"+p | 从系统剪贴板粘贴 |
"*y | 复制到主剪贴板(Linux 中键粘贴) |
"*p | 从主剪贴板粘贴 |
缩进
| 快捷键 | 作用 |
|---|---|
>> | 向右缩进(普通模式) |
<< | 向左缩进(普通模式) |
> + 移动命令 | 向右缩进文本块,如 >j 缩进当前和下一行 |
< + 移动命令 | 向左缩进文本块 |
= + 移动命令 | 自动缩进,如 =G 从当前行缩进到文件末尾 |
== | 自动缩进当前行 |
gg=G | 自动缩进整个文件 |
大小写转换
| 快捷键 | 作用 |
|---|---|
~ | 切换光标处字符的大小写 |
g~ + 移动命令 | 切换指定区域的大小写 |
gu + 移动命令 | 转换为小写(如 guw 将单词转为小写) |
gU + 移动命令 | 转换为大写 |
gugu 或 guu | 当前行转换为小写 |
gUgU 或 gUU | 当前行转换为大写 |
可视模式
进入可视模式
| 快捷键 | 作用 |
|---|---|
v | 字符级可视模式 |
V | 行级可视模式 |
Ctrl+v | 块级可视模式 |
gv | 重新选中上次的可视区域 |
可视模式下的操作
进入可视模式选中文本后,可以按以下命令进行操作:
| 快捷键 | 作用 |
|---|---|
d 或 x | 删除选中文本 |
y | 复制选中文本 |
c | 修改(删除后进入插入模式) |
~ | 切换大小写 |
u | 转换为小写 |
U | 转换为大写 |
> | 向右缩进 |
< | 向左缩进 |
= | 自动缩进 |
J | 合并行 |
I | 在块级可视模式下,在每行光标位置插入文本(按 Esc 生效) |
A | 在块级可视模式下,在每行光标后追加文本 |
r + 字符 | 将选中区域所有字符替换为指定字符 |
s | 删除选中区域并进入插入模式 |
S | 删除选中行并进入插入模式 |
块级可视模式技巧
- 选中多行的一个矩形区域后,按
I输入文本,按Esc后文本会插入到每行的相同位置 - 选中矩形区域后按
c可以删除矩形区域并进入插入模式 - 选中矩形区域后按
d删除矩形内容,留下空白区域 - 选中矩形区域后按
~可以转换大小写
查找与替换
基本搜索
| 快捷键 | 作用 |
|---|---|
/ + 模式 + Enter | 向下搜索 |
? + 模式 + Enter | 向上搜索 |
n | 重复上次搜索,相同方向 |
N | 重复上次搜索,相反方向 |
* | 搜索光标处的单词(向下) |
# | 搜索光标处的单词(向上) |
gd | 跳转到光标下的符号定义(LSP) |
gD | 跳转到光标下符号的声明 |
搜索设置
| 命令 | 作用 |
|---|---|
:set hlsearch | 开启搜索高亮 |
:set nohlsearch | 关闭搜索高亮 |
:set incsearch | 开启增量搜索(边输入边匹配) |
:set ignorecase | 忽略大小写 |
:set smartcase | 智能大小写(模式含大写时区分大小写) |
:nohlsearch 或 Ctrl+l | 暂时清除搜索高亮 |
替换
基本语法:
:[范围]s/查找模式/替换内容/[标志]| 命令 | 作用 |
|---|---|
:s/old/new/ | 替换当前行第一个匹配 |
:s/old/new/g | 替换当前行所有匹配 |
:%s/old/new/g | 替换整个文件所有匹配 |
:%s/old/new/gc | 替换整个文件所有匹配,逐个确认 |
:10,20s/old/new/g | 替换第 10-20 行的所有匹配 |
:.,$s/old/new/g | 替换从当前行到文件末尾 |
:'<,'>s/old/new/g | 替换选中区域(可视模式下按 : 自动添加范围) |
:%s/old/new/gi | 忽略大小写替换 |
:%s/\<old\>/new/g | 替换完整单词(不匹配 older) |
确认标志选项
| 标志 | 作用 |
|---|---|
c | confirm,逐个确认是否替换 |
g | global,替换行内所有匹配(默认只替换第一个) |
i | ignore case,忽略大小写 |
n | 只报告匹配次数,不实际替换 |
确认模式下的操作:
y:替换当前匹配n:跳过当前匹配a:替换所有剩余匹配q:退出替换l:替换当前匹配并退出
撤销与重做
| 快捷键 | 作用 |
|---|---|
u | 撤销上一步操作 |
Ctrl+r | 重做撤销的操作 |
U | 撤销对整行的所有修改(恢复到光标第一次到该行时的状态) |
:earlier 5m | 回到 5 分钟前的状态 |
:later 5m | 前进到 5 分钟后的状态 |
:earlier 3 | 撤销 3 次更改 |
:later 3 | 重做 3 次更改 |
:undolist | 查看所有撤销分支 |
:undo 5 | 跳转到第 5 次更改后的状态 |
重复操作
| 快捷键 | 作用 |
|---|---|
. | 重复最后一次修改操作 |
@: | 重复上次命令行命令 |
@@ | 重复上次执行的宏 |
& | 重复上次 :s 替换 |
Ctrl+A | 在光标处的数字上加 1 |
10Ctrl+A | 在光标处的数字上加 10 |
g Ctrl+A | 在可视模式下,按列递增数字 |
Ctrl+x | 在光标处的数字上减 1 |
10Ctrl+x | 在光标处的数字上减 10 |
g Ctrl+x | 在可视模式下,按列递减数字 |
寄存器
NeoVim 使用寄存器存储复制、删除、修改的文本。使用 " + 寄存器名访问。
寄存器列表
| 寄存器 | 名称 | 说明 |
|---|---|---|
" | 无名寄存器 | 默认寄存器,d、y、p 默认使用 |
0 | 复制专用寄存器 | yy 或 y 复制的内容存入(不包括 d 删除) |
1-9 | 删除专用寄存器 | 最近删除的内容,1 最新,9 最旧 |
a-z | 命名寄存器 | 用户自定义,内容会累积追加 |
A-Z | 大写命名寄存器 | 追加到对应小写寄存器 |
* | 主剪贴板 | Linux 中键粘贴,macOS 需配置 |
+ | 系统剪贴板 | Ctrl+c/Ctrl+v 使用的剪贴板 |
_ | 黑洞寄存器 | 写入后丢弃,用于删除而不影响其他寄存器 |
/ | 搜索寄存器 | 存储上次搜索的模式 |
: | 命令行寄存器 | 存储上次命令行命令 |
% | 文件名寄存器 | 存储当前文件名 |
# | 交替文件寄存器 | 存储上一个编辑的文件名 |
寄存器操作
| 快捷键 | 作用 |
|---|---|
"ayy | 将当前行复制到寄存器 a |
"ap | 粘贴寄存器 a 的内容 |
"Ayy | 将当前行追加到寄存器 a |
"+y | 复制到系统剪贴板 |
"+p | 从系统剪贴板粘贴 |
:reg | 查看所有寄存器内容 |
:reg a | 查看寄存器 a 的内容 |
宏录制与回放
宏用于录制一系列操作,然后重复执行。
基本操作
| 快捷键 | 作用 |
|---|---|
q + 寄存器名(a-z) | 开始录制宏到指定寄存器 |
q | 停止录制 |
@ + 寄存器名 | 播放宏一次 |
@@ | 重复播放上次的宏 |
5@a | 播放寄存器 a 中的宏 5 次 |
:normal @a | 在命令行中播放宏 |
:reg 查看宏内容 | 宏存储为文本,可编辑 |
示例
" 录制宏:删除当前行并在下一行添加序号qq " 开始录制到寄存器 qdd " 删除当前行j " 移动到下一行I1. \<Esc> " 在行首插入 "1. "q " 停止录制
" 重复执行宏@q " 执行一次5@q " 执行五次宏技巧
- 录制宏前使用
gg或G移动到起始位置 - 使用
n和N在宏中处理搜索结果 - 宏中可以包含递归调用(在宏中写
@a实现循环) - 录制宏出错时按
q停止,删除错误内容后重新录制 - 宏内容可编辑:
:let @q='内容'或直接修改寄存器
文本对象
文本对象允许对特定结构的文本块进行操作。语法格式为 [操作][i/a][对象],其中:
i:inner,不包含分隔符(如引号内的内容不含引号)a:around,包含分隔符(如引号内的内容包含引号)
| 操作符 | 说明 |
|---|---|
d | 删除(delete) |
c | 修改(change) |
y | 复制(yank) |
v | 选中(visual) |
常用文本对象
| 对象 | 快捷键 | 说明 |
|---|---|---|
| 单词 | iw / aw | inner word / around word |
| 大单词 | iW / aW | 以空格分隔的单词块 |
| 括号 | i( / a( 或 ib / ab | 括号内 / 包括括号 |
| 方括号 | i[ / a[ | 方括号内 / 包括方括号 |
| 花括号 | i{ / a{ 或 iB / aB | 花括号内 / 包括花括号 |
| 引号 | i" / a" | 双引号内 / 包括引号 |
| 单引号 | i' / a' | 单引号内 / 包括引号 |
| 反引号 | i` / a` | 反引号内 / 包括反引号 |
| 尖括号 | i< / a< | 尖括号内 / 包括尖括号 |
| 标签 | it / at | XML/HTML 标签内 / 包括标签 |
| 句子 | is / as | 句子内 / 包括句子 |
| 段落 | ip / ap | 段落内 / 包括段落 |
| 缩进块 | iI / aI | 同缩进级别的代码块 |
示例
" 假设光标在 "hello" 的任意位置ciw " 删除 hello 并进入插入模式ci" " 删除双引号内的内容(不含引号)da" " 删除包括双引号在内的整个字符串yip " 复制当前段落vat " 选中包括标签在内的整个 HTML 标签cit " 删除标签内内容并进入插入模式窗口管理
窗口操作
| 快捷键 | 作用 |
|---|---|
Ctrl+w s | 水平分割窗口 |
Ctrl+w v | 垂直分割窗口 |
Ctrl+w w | 在窗口间循环切换 |
Ctrl+w h/j/k/l | 切换到左/下/上/右窗口 |
Ctrl+w H/J/K/L | 将当前窗口移动到左/下/上/右 |
Ctrl+w t | 移动到左上角窗口 |
Ctrl+w b | 移动到右下角窗口 |
Ctrl+w p | 移动到上次访问的窗口 |
Ctrl+w q | 关闭当前窗口 |
Ctrl+w o | 只保留当前窗口,关闭其他 |
Ctrl+w = | 使所有窗口等高宽 |
Ctrl+w _ | 最大化当前窗口高度 |
Ctrl+w | | 最大化当前窗口宽度 |
Ctrl+w + | 增加当前窗口高度 |
Ctrl+w - | 减少当前窗口高度 |
Ctrl+w > | 增加当前窗口宽度 |
Ctrl+w < | 减少当前窗口宽度 |
:split 或 :sp | 水平分割窗口 |
:vsplit 或 :vs | 垂直分割窗口 |
:new | 水平分割并创建新空白缓冲区 |
:vnew | 垂直分割并创建新空白缓冲区 |
标签页操作
| 快捷键 | 作用 |
|---|---|
:tabnew | 新建标签页 |
:tabnew 文件名 | 在新标签页打开文件 |
gt | 切换到下一个标签页 |
gT | 切换到上一个标签页 |
1gt | 切换到第 1 个标签页 |
:tabclose 或 :tabc | 关闭当前标签页 |
:tabonly 或 :tabo | 只保留当前标签页 |
:tabmove 0 | 将当前标签页移动到最左 |
:tabmove | 将当前标签页移动到最右 |
Ctrl+w T | 将当前窗口移动到新标签页 |
缓冲区操作
| 快捷键 | 作用 |
|---|---|
:ls 或 :buffers | 列出所有缓冲区 |
:b n | 切换到缓冲区编号 n |
:b 文件名 | 切换到指定文件名的缓冲区(支持 Tab 补全) |
:bn | 切换到下一个缓冲区 |
:bp | 切换到上一个缓冲区 |
:bd | 删除当前缓冲区(关闭文件) |
:bw | 强制删除当前缓冲区(不保存) |
:e 文件名 | 编辑文件(在新缓冲区打开) |
:e# | 编辑上一个文件 |
:enew | 创建新空白缓冲区 |
Ctrl+^ | 在最近两个缓冲区之间切换 |
:bufdo 命令 | 在所有缓冲区执行命令,如 :bufdo %s/old/new/gc |
跳转与标记
内置标记
| 标记 | 说明 |
|---|---|
` ` | 上次跳转前的精确位置 |
'' | 上次跳转前的行首 |
[ | 上次修改/复制/粘贴的开始位置 |
] | 上次修改/复制/粘贴的结束位置 |
< | 上次可视选择的开始位置 |
> | 上次可视选择的结束位置 |
0 | 退出 NeoVim 时的光标位置 |
" | 上次退出当前缓冲区时的光标位置 |
. | 最后修改的位置 |
用户自定义标记
| 快捷键 | 作用 |
|---|---|
m + 字母(a-z) | 在光标位置设置局部标记(仅当前文件) |
m + 大写字母(A-Z) | 设置全局标记(跨文件) |
` + 字母 | 跳转到标记的精确位置 |
' + 字母 | 跳转到标记的行首 |
:marks | 查看所有标记 |
:delmarks a | 删除标记 a |
:delmarks! | 删除所有小写字母标记 |
常用标记示例
ma " 在当前光标位置设置标记 a`a " 跳转到标记 a 的精确位置'a " 跳转到标记 a 所在行的行首:marks a " 查看标记 a 的位置折叠
折叠方法
| 命令 | 作用 |
|---|---|
zf + 移动命令 | 创建折叠,如 zf% 折叠到匹配括号 |
zF | 创建指定行数的折叠(如 3zF 折叠 3 行) |
zfa{ | 折叠花括号内的内容 |
zd | 删除光标下的折叠 |
zD | 删除光标下的所有嵌套折叠 |
zE | 删除当前缓冲区中的所有折叠 |
折叠开关
| 快捷键 | 作用 |
|---|---|
zo | 打开光标下的折叠(open) |
zO | 递归打开光标下的所有折叠 |
zc | 关闭光标下的折叠(close) |
zC | 递归关闭光标下的所有折叠 |
za | 切换光标下的折叠状态(toggle) |
zA | 递归切换光标下的所有折叠 |
zv | 打开足够的折叠使当前行可见 |
zx | 更新折叠(重新应用 foldlevel) |
折叠导航
| 快捷键 | 作用 |
|---|---|
zj | 移动到下一个折叠的起始位置 |
zk | 移动到上一个折叠的起始位置 |
]z | 移动到当前折叠的末尾 |
[z | 移动到当前折叠的开头 |
折叠设置
:set foldmethod=indent " 根据缩进自动折叠:set foldmethod=marker " 根据标记折叠(如 {{{ }}}):set foldmethod=syntax " 根据语法折叠:set foldmethod=manual " 手动折叠(默认):set foldlevel=1 " 设置初始折叠级别(1 表示一级折叠打开):set foldcolumn=4 " 在左侧显示折叠列文件操作
基本文件操作
| 命令 | 作用 |
|---|---|
:w | 保存文件 |
:w 文件名 | 另存为 |
:q | 退出(如有未保存更改会提示) |
:q! | 强制退出(不保存) |
:wq 或 :x 或 ZZ | 保存并退出 |
:wqa | 保存所有并退出 |
:e 文件名 | 打开文件 |
:e! | 重新加载当前文件(放弃更改) |
:e# | 打开上一个文件 |
:enew | 创建新空白缓冲区 |
:find 文件名 | 在 path 中搜索并打开文件 |
:saveas 文件名 | 另存为 |
:bdelete 或 :bd | 删除缓冲区(关闭文件) |
多文件编辑
:args file1 file2 file3 " 设置参数列表:next 或 :n " 编辑下一个文件:previous 或 :N " 编辑上一个文件:first " 编辑第一个文件:last " 编辑最后一个文件:argdo 命令 " 在所有参数文件上执行命令外部命令集成
| 命令 | 作用 |
|---|---|
:! + 命令 | 执行外部命令 |
:r! + 命令 | 将外部命令输出插入到当前位置 |
:%! + 命令 | 将整个文件内容作为输入传递给外部命令,并用输出替换 |
:!ls | 列出当前目录文件 |
:r!date | 插入当前日期时间 |
:!git diff | 执行 git diff |
:w !python | 将当前缓冲区内容发送给 Python 执行 |
选中区域执行外部命令
在可视模式下选中文本后,按 : 会自动添加 '<,'> 范围,然后输入 ! + 命令可以将选中文本传递给外部命令并用输出替换。
帮助系统
| 命令 | 作用 |
|---|---|
:help 或 :h | 打开帮助 |
:h 主题 | 搜索帮助主题,如 :h navigation |
:h 命令 | 查看命令帮助,如 :h :w |
:h '选项' | 查看选项帮助,如 :h 'hlsearch' |
Ctrl+] | 在帮助中跳转到标签链接 |
Ctrl+o | 在帮助中返回上一位置 |
:helpgrep 模式 | 在所有帮助文档中搜索模式 |
:help -c | 查看命令行参数帮助 |
常用配置建议
" 基础设置set number " 显示行号set relativenumber " 显示相对行号set cursorline " 高亮当前行set showmode " 显示当前模式set showcmd " 显示未完成的命令set wildmenu " 命令行补全增强set wildmode=longest:list,fullset ignorecase " 搜索忽略大小写set smartcase " 智能大小写set incsearch " 增量搜索set hlsearch " 高亮搜索结果set scrolloff=5 " 光标上下保留 5 行set sidescrolloff=5 " 光标左右保留 5 列set mouse=a " 启用鼠标set clipboard=unnamedplus " 使用系统剪贴板(需支持)set timeoutlen=300 " 按键序列等待时间set ttimeoutlen=30 " 按键码等待时间set splitbelow " 新水平分割在下方set splitright " 新垂直分割在右侧
" 缩进设置set autoindent " 自动缩进set smartindent " 智能缩进set tabstop=4 " Tab 宽度set shiftwidth=4 " 缩进宽度set expandtab " 将 Tab 展开为空格
" 文件类型检测filetype onfiletype plugin onfiletype indent on
" 语法高亮syntax on总结
NeoVim 的键盘操作体系可以归纳为以下几个层次:
| 层次 | 内容 | 学习优先级 |
|---|---|---|
| 基础 | 模式切换、基本移动(hjkl)、i、a、o、dd、yy、p、u | 必须掌握 |
| 进阶 | 单词移动(w、b、e)、行移动(0、$)、删除修改(ciw、da")、查找替换 | 核心效率 |
| 高级 | 宏录制、文本对象、寄存器、多窗口、折叠 | 提升上限 |
| 专家 | 命令组合、自定义映射、LSP 集成 | 按需学习 |
掌握 NeoVim 的核心在于组合:动作 + 文本对象 + 计数。例如 d2w(删除两个单词)、ci"(修改引号内内容)、y3j(复制下面三行)。熟练之后,编辑效率会有显著提升。