Article

Neovim 快捷键速查

Neovim 中 lazy.nvim 插件管理界面,展示已安装插件及部分快捷键

这份速查表对应我本地 ~/.config/nvim 配置。配置过程见 macOS 下从零配置 Neovim(关于LSP和DAP的配置还没有写喵,等以后有空了再写吧)。

按键写法

  • Leader 是空格:<Space>rn 表示依次按空格、r、n,不需要同时按。
  • <C-w>h 表示先同时按 Ctrl+w,松开后再按 h;<CR> 是回车,<BS> 是退格。
  • 普通模式执行命令,插入模式输入文字,可视模式选择文字;终端输入模式会把按键交给终端程序。
  • 除非特别标注,快捷键都在普通模式使用。带 : 的命令输入后按回车。

常用速查

以下都是当前配置中的自定义快捷键。

功能按键使用位置
退出插入模式jj插入模式
开关右侧目录树<Space>e普通模式
在目录树中定位当前文件<Space>f普通模式
打开左终端、右目录布局<Space>ui普通模式
开关左侧终端<Space>tt普通模式
离开终端输入模式<Esc><Esc>终端输入模式
从终端切到右侧编辑窗口<C-l>终端输入模式
跳到定义 / 查找引用gd / grLSP 已连接的代码缓冲区
查看符号文档KLSP 已连接的代码缓冲区
重命名符号<Space>rnLSP 已连接的代码缓冲区
查看当前行诊断<Space>dLSP 已连接的代码缓冲区
打开撤销树<F5>普通模式
添加或删除断点<F9>代码缓冲区
开始或继续调试<Space>dc已配置调试目标的项目

基础移动与编辑

模式与单词移动

按键作用来源 / 模式
i / a在光标前 / 后开始输入原生 / 普通
I / A在本行首个非空字符前 / 行末开始输入原生 / 普通
o / O在下方 / 上方新建一行并开始输入原生 / 普通
<Esc>回到普通模式原生 / 插入、可视
jj回到普通模式自定义 / 插入
w / b / e下一个单词开头 / 上一个单词开头 / 单词末尾原生 / 普通
<Esc>b / <Esc>f执行 b / w,向前 / 向后移动到单词开头自定义 / 普通
<Esc>b / <Esc>f临时执行一次 b / w,然后继续输入自定义 / 插入

<Esc>b 和 <Esc>f 是终端发送的按键序列。如果 macOS 终端将 Option 配置为 Meta / Esc 前缀,通常可以用 Option+b、Option+f 触发;实际行为取决于终端设置。这里的向后移动对应 w,落点是单词开头。

定位、选择与修改

以下为 Neovim 原生操作。

按键作用
h / j / k / l左 / 下 / 上 / 右移动
5j / 5k向下 / 向上移动 5 行,数字可替换
0 / ^ / $行首 / 本行首个非空字符 / 行末
gg / G / 42G文件开头 / 文件末尾 / 第 42 行
<C-d> / <C-u>向下 / 向上滚动半屏
zz把当前行放到窗口中间
v / V / <C-v>按字符 / 整行 / 矩形块选择
yy / dd复制 / 删除当前行
p / P在光标后 / 前粘贴,整行内容则放在下方 / 上方
ciw / diw / yiw修改 / 删除 / 复制光标所在单词
ci" / ci(修改双引号 / 圆括号内部的内容
u / <C-r>撤销 / 重做
.重复上一次修改
>> / <<增加 / 减少当前行缩进
==按当前缩进规则重新缩进这一行

当前配置显示相对行号,看到目标在下面第 8 行时,可以直接按 8j。缩进宽度为 4,Tab 会转换为空格。

搜索与替换

按键 / 命令作用
/关键字 / ?关键字向后 / 向前搜索,回车确认
n / N沿搜索方向继续 / 反向查找
* / #向后 / 向前搜索光标所在单词
:%s/旧内容/新内容/gc全文件逐个确认替换;匹配内容按正则解释
:noh暂时清除搜索高亮

这里的搜索作用于当前文件。当前配置没有安装 Telescope 主插件,也没有定义 <Space>ff、<Space>fg;<Space>f 的用途是在目录树中定位当前文件。

文件与右侧目录树

<Space>e 开关 nvim-tree,<Space>f 打开目录树并定位当前文件。目录树位于右侧,宽度为 30 列,打开文件后不会自动关闭,默认显示点文件。

下面是当前安装的 nvim-tree 默认键位,只在目录树窗口中使用。

按键作用
j / k向下 / 向上选择节点
<CR> / o打开文件,或展开 / 折叠目录
<BS>折叠父目录
P移动到父目录节点
-把目录树根目录切换到上一级
<C-v> / <C-x>在垂直 / 水平分屏中打开文件
<C-t>在新标签页打开文件
a新建文件或目录,目录名以 / 结尾
r重命名
c / x / p复制 / 剪切 / 粘贴文件或目录
d删除文件或目录,留意确认提示
y / Y / gy复制文件名 / 相对路径 / 绝对路径
f / F开始 / 清除目录树名称过滤
H切换点文件显示
R刷新目录树
W / E折叠全部 / 展开全部目录
g?显示目录树快捷键帮助
q关闭目录树

同一个键在不同窗口里作用不同:代码窗口的 yy 复制文本,目录树里的 y 复制文件名;目录树的 d 会操作磁盘上的文件。

文件保存和切换使用原生命令:

命令作用
:w / :wa保存当前 / 所有已修改文件
:q / :wq关闭当前窗口 / 保存后关闭当前窗口
:q!强制关闭当前窗口,可能丢弃未保存的修改
:qa退出全部窗口,未保存修改会阻止退出
:e 路径打开文件
:ls查看缓冲区列表
:b 编号切换到指定缓冲区
:bn / :bp下一个 / 上一个缓冲区

窗口与左侧终端

窗口切换

以下都是原生窗口命令,在普通模式使用。缓冲区是打开的内容,窗口是显示内容的区域;多个窗口可以显示同一个缓冲区。

按键 / 命令作用
<C-w>h / <C-w>l切到左侧 / 右侧窗口
<C-w>j / <C-w>k切到下方 / 上方窗口
<C-w>w循环切换窗口
:vs / :sp左右 / 上下分屏
<C-w>=均分窗口大小
<C-w>> / <C-w><增加 / 减少窗口宽度
<C-w>+ / <C-w>-增加 / 减少窗口高度
<C-w>c关闭当前窗口

ToggleTerm 终端

按键作用模式 / 来源
<Space>tt开关编号 1 的左侧终端普通 / 自定义
<Space>ui打开右侧目录树,并打开或保留编号 1 的左侧终端普通 / 自定义
<Esc><Esc>离开终端输入模式,终端保持打开终端输入 / 自定义
<C-l>离开终端输入模式,并切到右侧相邻窗口终端输入 / 自定义
<C-\><C-n>离开终端输入模式终端输入 / 原生
i重新开始向终端输入终端缓冲区的普通模式 / 原生

<Space>ui 是打开工作布局的入口:左侧终端约占总宽度的 20%,右侧目录树宽 30 列,中间留给代码。已经打开的终端会被复用,再按一次也不会把它关闭。

终端打开后自动进入输入模式。此时 jj 会输入到终端,空格开头的快捷键也不会按普通模式映射执行。先按两次 Esc,才能使用 <Space>tt 隐藏终端;隐藏后进程仍可继续运行,在 shell 中执行 exit 才会结束该 shell,终端随之关闭。

当前配置在正常退出 Neovim 时会清理终端缓冲区;如果仍有未保存的普通文件,会先保留终端。需要持续运行的任务应放在独立终端或会话管理器中。

LSP:跳转、重命名与诊断

当前显式启用的语言服务器是 clangd,启动路径为 /usr/bin/clangd,主要用于 C / C++。项目根目录标记包含 compile_commands.json、.clangd、.git。下面这些自定义映射会在 LspAttach 时绑定到对应缓冲区。

按键作用
gd跳到定义
gD跳到声明
gr查找引用
K查看光标处符号文档
<Space>rn重命名符号
<Space>ca请求代码操作
<Space>d浮窗查看当前行诊断
[d / ]d跳到上一条 / 下一条诊断

跳转后可用原生 <C-o> 返回较早的跳转位置,<C-i> 前往较新的位置。查找引用出现 quickfix 列表时,可以用 :copen 打开,:cn / :cp 切换结果。

这套配置没有额外安装补全插件。LSP 连接并提供补全能力后,可以在插入模式用原生 <C-x><C-o> 手动触发 omni 补全,再用 <C-n> / <C-p> 选择、<C-y> 接受、<C-e> 取消;没有自定义 Tab 补全映射。

如果键位没有反应,先运行 :checkhealth vim.lsp 查看服务器状态。C / C++ 工程缺少正确的编译参数时,即使 clangd 已连接,头文件解析和跳转结果也可能不完整。

面包屑与撤销树

Dropbar 面包屑

按键作用来源
<Space>;进入面包屑选择模式,按显示的提示选择路径或符号自定义
[;跳到当前上下文开头;已经在开头时尝试上一级自定义
];打开当前上下文菜单,选择下一级上下文自定义
<CR>激活菜单中的当前条目插件默认 / 菜单内
q / <Esc>关闭菜单插件默认 / 菜单内

]; 会打开选择菜单,并非直接跳到下一个函数;能列出哪些代码符号取决于当前文件的符号来源是否可用。

Undotree 撤销树

<F5> 是自定义的撤销树开关,不是启动调试。打开后用窗口切换键进入撤销树窗口,再使用以下插件默认键位:

按键作用
j / k移动到树中的条目
<CR>恢复到光标所在的撤销状态
J / K切到上一个 / 下一个撤销状态
u / <C-r>撤销 / 重做
D开关差异面板
<Tab>把焦点切回编辑窗口
? / q显示帮助 / 关闭撤销树

当前启用了持久化撤销,历史目录为 ~/.nvim/undo,重开文件后仍可继续查找历史修改。配置关闭了交换文件,撤销历史和交换文件承担不同用途,仍要及时保存。

DAP:RISC-V 调试

当前 nvim-dap 使用 riscv64-elf-gdb -q -nx --interpreter=dap 作为适配器。以下是自定义键位,除表达式求值外都在普通模式使用。

按键作用
<F9>添加或删除当前行断点
<Space>dc开始调试或继续执行
<F10>单步跳过:执行当前语句,不进入函数内部
<F11>单步进入函数
<F12>跳出当前函数
<Space>du开关调试面板
<Space>de查看光标处表达式的值;也支持可视模式选区
<Space>dr开关调试控制台 REPL
<Space>dq结束调试并关闭调试面板

调试连接初始化后,底部会自动打开高度 12 行的面板,包含变量作用域、调用栈和监视表达式;会话终止或程序退出时自动关闭。代码行尾会显示变量值,断点标记为 ●,当前执行位置标记为 ▶。

使用前提:全局 dap.lua 只定义了适配器,没有提供具体程序的启动或附加配置。 项目还需要提供对应的 dap.configurations 或适用的 .vscode/launch.json,并确保 GDB 可用。调试 xv6 时,还需要先启动 QEMU 的 GDB 服务并设置符号文件、连接目标;单独按 <Space>dc 不会自动完成这些步骤。环境准备可参考 xv6 的 macOS 环境记录。

Mac 键盘的功能键如果被系统接管,需要配合 fn 使用,或在系统设置中启用标准功能键。

配置文件

文件负责的快捷键或行为
init.luajj、Esc 前缀的单词移动、基础选项与持久化撤销
lua/config/lazy.lua插件加载、Leader / LocalLeader 设置
lua/plugins/nvim-tree.lua<Space>e、<Space>f、右侧目录树
lua/plugins/toggleterm.lua<Space>tt、<Space>ui、终端内双 Esc 与 <C-l>
lua/plugins/lsp.luaclangd 和 LSP 缓冲区映射
lua/plugins/dropbar.lua<Space>;、[;、];
lua/plugins/undotree.lua<F5>
lua/plugins/dap.lua断点、单步、调试面板与 REPL
lazy-lock.json本次安装的插件版本快照

这些路径都相对于 ~/.config/nvim/。LocalLeader 虽然在 init.lua 中设为空格,但随后被 lua/config/lazy.lua 覆盖为反斜杠;本文列出的自定义快捷键使用的是 Leader,仍然是空格。

遇到冲突时,在实际使用的窗口中查询映射来源:

vim
:verbose nmap <Space>e
:verbose nmap gd
:verbose imap jj
:verbose tmap <C-l>

LSP 键位要在已连接服务器的代码缓冲区中查询,终端键位要在已打开的 ToggleTerm 缓冲区中查询。原生命令可用 :help 按键 查阅,例如 :help CTRL-W、:help i_CTRL-X_CTRL-O;目录树按 g?,撤销树按 ?,查看当前安装版本的帮助。

Neovim 快捷键速查

https://www.renpengyu.com/articles/neovim-keybindings/
作者
Penry
发布于
2026.10.22
许可协议
CC BY-NC-SA 4.0
站内搜索

找到你感兴趣的内容

文章分类
选择文章分类,匹配任意一个所选分类

多选时显示属于任一所选分类的文章。

文章标签
选择文章标签,多个标签需同时包含

多选时只显示同时包含所选标签的文章。

输入关键词开始搜索