持续维护最后验证:2026-09-01T09:00:34Z
Neovim 快捷键学习手册
本手册以当前 ~/.config/nvim 的实际配置为准,适合边用边查。
它覆盖两类内容:本配置明确设置的全部快捷键,以及日常编辑必须掌握的 Neovim 原生操作。
Neovim 原生命令非常多,本文优先说明日常编辑、文件管理、代码阅读和开发流程中真正会用到的部分。
一、先记住这 12 个按键
刚开始不需要背完整张表。先把下面这些用熟,已经足够完成大部分日常工作。
| 按键 |
什么时候用 |
作用 |
<Space> e |
要找文件、浏览目录 |
打开文件管理器 |
Ctrl+i/j/k/l |
文件管理器、代码、分屏之间移动 |
上 / 左 / 下 / 右切换窗口 |
Shift+Left / Shift+Right |
打开了多个文件 |
上一个 / 下一个文件 |
1 至 9 |
想直接到顶部某个文件 |
切到第 1 至第 9 个文件 |
<Space> b b |
文件很多或忘了文件位置 |
打开已打开文件的列表 |
<Space> f f |
要打开项目内文件 |
按文件名查找并打开 |
<Space> f g |
要在项目中找文字 |
全项目文本搜索 |
<Space> w |
编辑后 |
保存当前文件 |
i / jj |
开始 / 结束输入文字 |
进入插入模式 / 回到普通模式 |
u / Ctrl+r |
操作错了 |
撤销 / 重做 |
K |
看不懂当前函数、变量或类型 |
显示代码文档 |
<Space> c a |
代码有提示或可自动修复 |
打开代码动作菜单 |
二、记号与模式
按键记号
| 写法 |
含义 |
<Space> 或 <leader> |
空格键。本配置的自定义功能入口。 |
<C-x> |
按住 Ctrl 再按 x,例如 <C-j> 是 Ctrl+j。 |
<S-x> |
按住 Shift 再按 x。 |
<C-S-x> |
同时按住 Ctrl、Shift 再按 x。 |
<CR> |
回车键。 |
<Esc> |
Escape 键。 |
在普通模式按 <Space> 后稍等片刻,which-key 会显示后续可用的中文快捷键。它只显示本配置的中文说明,避免大量英文内置提示干扰学习。
四个最常用模式
| 模式 |
如何进入 |
如何退出 |
用途 |
| 普通模式 |
<Esc> 或刚打开文件时 |
无需退出 |
移动、删除、复制、保存、切换窗口等。 |
| 插入模式 |
i、a、o 等 |
jj 或 <Esc> |
输入文字。 |
| 可视模式 |
v、V、Ctrl+v |
<Esc> |
选中字符、行或矩形区域后再操作。 |
| 命令行模式 |
: |
<Esc> |
输入命令,例如 :w、:q、:Lazy。 |
建议:需要输入文字时先按 i;输入结束马上按 jj 回普通模式。绝大多数快捷键都在普通模式使用。
保存、退出与终端
| 按键 |
模式 |
作用 |
<Space> w |
普通 |
保存当前文件。 |
<Space> q |
普通 |
退出当前窗口;有未保存修改时 Neovim 会提醒。 |
<Space> Q |
普通 |
退出全部 Neovim 窗口。 |
<Esc> |
普通 |
清除当前搜索结果的高亮。 |
<Space> t t |
普通 |
打开或切换终端(在当前路径,即 Neovim 当前工作目录)。 |
Ctrl+\ |
普通 |
打开或切换终端(与 <Space> t t 相同)。 |
<Esc> |
终端 |
退出终端输入模式;再按 <Space> t t 或 Ctrl+\ 可关闭终端。 |
三、日常编辑与原生操作
光标移动和阅读文件
本配置不要求使用 h/j/k/l。普通模式可以直接使用方向键移动光标。
| 按键 |
作用 |
使用提示 |
Left/Down/Up/Right |
左 / 下 / 上 / 右移动光标 |
推荐的基础移动方式。 |
Home / End |
行首 / 行尾 |
适合编辑当前行。 |
PageUp / PageDown |
向上 / 向下翻页 |
快速阅读。 |
Ctrl+u |
向上翻半页并居中 |
已启用平滑滚动。 |
Ctrl+d |
向下翻半页 |
已启用平滑滚动。 |
gg / G |
文件开头 / 文件结尾 |
浏览长文件。 |
gv |
重新选择上一次的可视选区 |
选区操作后恢复刚才的选择。 |
gq 加移动 |
格式化一段文字 |
例如在可视选择后按 gq。 |
w / b / e |
下个词首 / 上个词首 / 当前或下个词尾 |
熟悉后比逐字符移动快。 |
0 / ^ / $ |
行首 / 第一个非空字符 / 行尾 |
适合代码行。 |
Ctrl+o |
跳转历史的上一个位置 |
从定义跳转回来时常用。 |
输入、删除、复制与撤销
| 按键 |
模式 |
作用 |
i / a |
普通 |
在光标前 / 后开始输入。 |
I / A |
普通 |
在行首第一个字符前 / 行尾开始输入。 |
o / O |
普通 |
在下方 / 上方新建一行并开始输入。 |
jj / <Esc> |
插入 |
回到普通模式。 |
x / X |
普通 |
删除光标处字符 / 前一个字符。 |
dd |
普通 |
删除整行。 |
D |
普通 |
从光标删到行尾。 |
yy |
普通 |
复制整行。 |
y 后接移动 |
普通 |
复制一个范围,例如 yw 复制一个词。 |
p / P |
普通 |
在光标后 / 前粘贴;由 Yanky 管理粘贴历史。 |
gp / gP |
普通 |
粘贴后保留光标位置。 |
Ctrl+n / Ctrl+p |
普通 |
循环下一个 / 上一个粘贴历史内容。 |
u / Ctrl+r |
普通 |
撤销 / 重做。 |
. |
普通 |
重复上一次修改。 |
选择与批量编辑
| 按键 |
作用 |
v |
按字符进入可视选择。 |
V |
按整行进入可视选择。 |
Ctrl+v |
矩形选择,适合多行同时插入或删除。 |
> / < |
在可视模式中增加 / 减少缩进,并保持选中。 |
p |
在可视模式中粘贴并替换选区;被替换内容进入 Yanky 历史,可用 Ctrl+p 找回。 |
d / y / c |
删除 / 复制 / 修改当前选区。 |
注释、环绕与快速跳转
这些是注释(Neovim 内置)、环绕(mini.surround)与快速跳转(flash.nvim)的操作。
| 按键 |
作用 |
例子 |
gcc |
注释或取消注释当前行 |
在代码行上直接按。 |
gc 加移动 |
注释一个范围 |
gc} 注释到当前段落结束。 |
gsa 加移动再加符号 |
为范围添加环绕符号 |
gsaiw" 为当前词加双引号;可视模式下选中后 gsa"。 |
gsd 加符号 |
删除环绕符号 |
gsd" 删除一对双引号。 |
gsr 加旧符号和新符号 |
替换环绕符号 |
gsr"' 把双引号改为单引号。 |
gsh |
高亮显示最近的环绕符号 |
不确定配对位置时按一下。 |
s |
Flash 快速跳转 |
输入目标字符,再按屏幕提示的字母跳转。 |
四、文件、目录与已打开文件
三种“文件页面”的区别
| 名称 |
你会看到什么 |
本配置的切换方式 |
| 文件管理器 |
左侧或独立的目录树 |
<Space> e 打开;用 Ctrl+i/j/k/l 切换焦点。 |
| 缓冲区 |
顶部一排已打开文件名 |
Shift+Left/Right、1 至 9、<Space> b b。 |
| Vim 标签页 |
一个标签页中可以包含多个分屏 |
Shift+Up/Down。通常较少使用。 |
文件管理器
| 按键或命令 |
作用 |
使用方式 |
<Space> e |
Snacks 文件管理器 |
打开或关闭项目目录浏览器。 |
Ctrl+i |
切到上方窗口 |
文件管理器在上方时进入它。 |
Ctrl+j |
切到左侧窗口 |
文件管理器在左侧时回到它。 |
Ctrl+k |
切到下方窗口 |
文件管理器在下方时进入它。 |
Ctrl+l |
切到右侧窗口 |
文件管理器在左侧时回到正文。 |
- |
Oil 文件管理器 |
以可编辑缓冲区形式浏览当前文件所在目录。 |
在 Snacks 文件管理器或文件查找列表中,通常用方向键选中项目、按回车打开、按 <Esc> 关闭当前面板。打开文件后焦点可能留在文件管理器;按 Ctrl+l 即可回到右侧正文窗口。
缓冲区:顶部文件栏
顶部显示的一排文件名是缓冲区,不是 Vim 标签页。它们代表当前 Neovim 已打开的文件。
| 按键 |
作用 |
适用场景 |
Shift+Left / Shift+Right |
上一个 / 下一个缓冲区 |
在两个或少量文件间来回切换。 |
1 至 9 |
切换顶部第 1 至第 9 个缓冲区 |
已知目标文件在顶部的位置。 |
<Space> b b |
打开缓冲区列表 |
文件很多或记不住位置时推荐。 |
<Space> b d |
智能关闭当前缓冲区 |
有修改会先保存,再关闭。 |
<Space> b o |
关闭其他缓冲区 |
只保留当前文件。 |
注意:普通模式的数字 1 至 9 已被专门用于选择顶部文件栏。因此它们不能再作为重复次数前缀使用。例如需要执行“向下移动 5 行”时,可临时使用命令行 :normal 5j,或直接使用 PageDown / 搜索。
Vim 标签页
Vim 标签页和顶部的缓冲区不同。一个标签页可包含多个分屏窗口。
| 按键或命令 |
作用 |
Shift+Up / Shift+Down |
上一个 / 下一个 Vim 标签页。 |
<Space> T n |
新建标签页。 |
<Space> T x |
关闭当前标签页。 |
<Space> T o |
只保留当前标签页(关闭其它标签页)。 |
:tabnew |
新建标签页。 |
:tabclose |
关闭当前标签页。 |
:tabs |
列出所有标签页。 |
五、分屏窗口与尺寸调整
创建、关闭与切换窗口
| 按键 |
作用 |
说明 |
<Space> s v |
左右分屏 |
当前文件会出现在两个窗口中。 |
<Space> s h |
上下分屏 |
当前文件会出现在两个窗口中。 |
Ctrl+i |
切到上方窗口 |
IJKL 方向布局中的上。 |
Ctrl+j |
切到左侧窗口 |
IJKL 方向布局中的左。 |
Ctrl+k |
切到下方窗口 |
IJKL 方向布局中的下。 |
Ctrl+l |
切到右侧窗口 |
IJKL 方向布局中的右。 |
<Space> s x |
关闭当前窗口 |
不会自动关闭缓冲区。 |
<Space> s o |
只保留当前窗口 |
关闭其余分屏。 |
<Space> s e |
均衡所有分屏尺寸 |
适合调整后恢复整齐布局。 |
<Space> s m |
最大化当前窗口 |
再按 <Space> s e 可恢复均衡大小。 |
调整当前窗口大小
先用 Ctrl+i/j/k/l 进入需要调整的窗口,再按下面的组合键。每次宽度变化 5 列,高度变化 3 行。
| 按键 |
作用 |
Ctrl+PageUp |
缩小当前窗口宽度。 |
Ctrl+PageDown |
扩大当前窗口宽度。 |
Ctrl+Shift+PageUp |
缩小当前窗口高度。 |
Ctrl+Shift+PageDown |
扩大当前窗口高度。 |
六、查找、搜索与跳转
项目级查找
| 按键 |
作用 |
适用场景 |
<Space> f f |
按文件名查找文件 |
打开项目内文件。 |
<Space> f r |
最近文件 |
回到刚编辑过的文件。 |
<Space> f g |
全局文本搜索 |
在整个项目里查函数名、错误文字。 |
<Space> f w |
搜索光标下单词或可视选区 |
快速找当前变量、函数名。 |
<Space> f s |
当前文件符号 |
查找函数、类、方法。 |
<Space> f h |
Neovim 帮助 |
查官方帮助主题。 |
<Space> f k |
已注册快捷键 |
忘记按键时查找。 |
<Space> f R |
项目级查找替换 |
批量修改前先确认范围。 |
搜索面板内输入文字过滤结果,使用方向键选择,按回车确认,按 <Esc> 取消。
当前文件内搜索
| 按键 |
作用 |
/文字 后回车 |
向下搜索。 |
?文字 后回车 |
向上搜索。 |
n / N |
下一个 / 上一个搜索结果。 |
* / # |
向下 / 向上搜索光标所在完整单词。 |
<Esc> |
清除搜索高亮。 |
s |
Flash 跳转;适合在当前屏幕内快速定位字符。 |
七、代码导航、补全与诊断
下面的语言服务快捷键只在当前文件已启动 LSP 时有效,例如 Lua、Python、C/C++、TypeScript、Rust 等。
代码导航与修改
| 按键 |
作用 |
适用场景 |
K |
悬浮文档 |
查看函数参数、变量类型、说明。 |
gd |
跳转定义 |
进入函数、变量、类型的定义。 |
gD |
跳转声明(Snacks 预览) |
在预览窗口中查看声明,Esc 关闭。 |
gr |
查找引用 |
找出项目中全部使用位置。 |
gi |
跳转实现 |
进入接口或抽象类的实现。 |
gy |
跳转类型定义(Snacks 预览) |
在预览窗口中查看类型定义,Esc 关闭。 |
Ctrl+o |
返回上一个跳转位置 |
从定义返回调用处。 |
<Space> c a |
代码动作 |
修复、导入、重构等。 |
<Space> c r |
重命名符号 |
输入新名称后确认,LSP 会更新引用。 |
<Space> c f |
格式化当前文件 |
保存时也会自动格式化。 |
<Space> c s |
代码符号大纲 |
打开当前文件的函数、类、方法列表。 |
诊断与问题列表
| 按键 |
作用 |
[d / ]d |
上一条 / 下一条诊断。 |
<Space> x d |
显示光标位置的诊断说明。 |
<Space> x x |
打开整个工作区诊断列表。 |
<Space> x X |
只打开当前文件诊断列表。 |
插入模式补全
| 按键 |
作用 |
Ctrl+j / Ctrl+k |
补全列表的下一个 / 上一个候选项。 |
Ctrl+b / Ctrl+f |
向上 / 向下滚动候选项文档。 |
Ctrl+/ |
主动打开补全菜单。 |
<CR> |
确认当前候选项。 |
<Esc> 或 jj |
取消输入并回到普通模式。 |
Ctrl+j/k 在插入模式只控制补全;在普通模式才用于切换分屏窗口,因此两者不冲突。
八、Git、结构化代码与折叠
Git
| 按键 |
作用 |
说明 |
[h / ]h |
上一处 / 下一处 Git 修改块 |
仅 Git 仓库内文件有效。 |
<Space> g g |
打开 LazyGit |
进行暂存、提交、分支等操作。 |
<Space> g b |
浏览 Git 链接 |
可用于打开或复制远端链接。 |
<Space> g d |
打开差异视图 |
查看当前工作区差异。 |
<Space> g h |
打开文件历史 |
查看当前文件历史。 |
函数、类与参数文本对象
这些功能依赖 Tree-sitter,适用于解析器已安装的代码文件。可与 d、y、c、v 组合。
| 对象 |
含义 |
示例 |
af / if |
整个函数 / 函数内部 |
daf 删除整个函数;yif 复制函数体。 |
ac / ic |
整个类 / 类内部 |
vac 选中整个类。 |
aa / ia |
整个参数 / 参数内部 |
cia 修改当前参数内容。 |
]f / [f |
下一个 / 上一个函数开头 |
快速在函数之间移动。 |
]c / [c |
下一个 / 上一个类开头 |
快速在类之间移动。 |
折叠
| 按键 |
作用 |
zR / zM |
展开全部 / 关闭全部折叠。 |
zo / zc |
展开 / 关闭当前折叠。 |
za |
切换当前折叠。 |
九、运行、测试、调试、构建与 Rust
运行当前文件
| 按键 |
作用 |
<Space> r f |
运行当前文件,按文件类型自动选择:Python(python3)、C/C++(编译到 /tmp 后运行)、Shell(bash)、Lua(lua)、JS/TS(node)、Go(go run)、Rust(cargo run)。 |
运行由 code_runner 插件在浮动终端中进行:输出始终可见、支持 input() 等交互式输入,运行结束后按 Esc 或 q 关闭窗口。
会话管理(persistence.nvim)
退出时自动保存当前目录的窗口与缓冲区布局。
| 按键 |
作用 |
<Space> p s |
恢复当前目录的会话。 |
<Space> p l |
恢复上一次保存的会话(不限目录)。 |
<Space> p d |
本次退出时不保存会话。 |
测试
| 按键 |
作用 |
<Space> t r |
运行最近一次测试。 |
<Space> t f |
运行当前文件测试。 |
<Space> t d |
用调试器运行最近一次测试。 |
<Space> t s |
打开或关闭测试总览。 |
<Space> t o |
打开测试输出。 |
调试
| 按键 |
作用 |
<Space> d c |
启动或继续调试。 |
<Space> d b |
在当前行添加或删除断点。 |
<Space> d B |
添加条件断点。 |
<Space> d o |
单步跳过。 |
<Space> d i |
单步进入。 |
<Space> d O |
单步退出当前函数。 |
<Space> d r |
打开调试交互终端。 |
<Space> d u |
显示或隐藏调试界面。 |
Python 调试:在 Python 文件中按 <Space> d c,选择 Python: Launch file(首次使用前 Mason 会自动安装 debugpy)。
C/C++ 调试:在 C/C++ 文件中按 <Space> d c,选择 codelldb;CMake 项目可先按 <Space> m d 构建后调试。
C/C++ 构建
这些命令假定当前项目使用 CMake,并在项目根目录的 build/ 下构建。没有 CMake 的单个文件请用 <Space> r f。
| 按键 |
作用 |
<Space> m b |
构建 C++ 项目。 |
<Space> m r |
构建后运行检测到的可执行文件。 |
<Space> m d |
构建后启动调试。 |
Rust
以下快捷键只在 Rust 文件中可用。
| 按键 |
作用 |
<Space> r r |
运行可运行目标。 |
<Space> r t |
选择并运行测试。 |
<Space> r d |
选择可调试目标。 |
<Space> r e |
解释当前错误。 |
<Space> r c |
打开 Cargo.toml。 |
十、任务、开关与工具
任务
| 按键 |
作用 |
<Space> r f |
运行当前文件(多语言)。 |
<Space> o r |
选择并运行 Overseer 任务。 |
<Space> o l |
打开或关闭任务列表。 |
<Space> o o |
对当前任务执行快速操作。 |
编辑开关与界面工具
| 按键 |
作用 |
<Space> u s |
开启或关闭拼写检查。 |
<Space> u w |
开启或关闭自动换行。 |
<Space> u h |
开启或关闭当前缓冲区的行内类型提示。 |
<Space> u u |
打开或关闭撤销树。 |
<Space> n |
查看通知历史。 |
<Space> l |
打开 Lazy 插件管理器。 |
<Space> M |
打开 Mason 语言服务和工具管理器。 |
Ctrl+\ 或 <Space> t t |
打开或切换终端。 |
<Esc>(终端模式) |
退出终端输入模式;随后按 Ctrl+\ 关闭终端。 |
其他可用命令
这些功能已安装但没有自定义单键映射,使用命令行模式 : 调用。
| 命令 |
作用 |
:CccPick |
打开颜色选择器。 |
:MarkdownPreviewToggle(或 <Space> m p) |
在浏览器中切换 Markdown 预览。 |
:UndotreeToggle |
切换撤销树。 |
:Trouble |
打开 Trouble 问题列表。 |
:AerialToggle |
切换代码符号大纲。 |
:DiffviewOpen |
打开 Git 差异视图。 |
:OverseerRun |
运行任务。 |
十一、推荐学习顺序
- 先练习:
i、jj、方向键、u、Ctrl+r、<Space>w。
- 然后练习文件流转:
<Space>e、Ctrl+i/j/k/l、Shift+Left/Right、<Space>bb、<Space>ff。
- 再练习代码阅读:
K、gd、Ctrl+o、gr、[d、]d。
- 开始写代码后使用:
<Space>ca、<Space>cr、<Space>cf、补全的 Ctrl+j/k。
- 最后按需要学习 Git、测试、调试、Tree-sitter 文本对象和任务系统。
遇到不确定的功能时,先按 <Space> 看中文提示,或用 <Space>fk 搜索已注册快捷键。这个习惯比硬背整张表更有效。