Files
notes/resource/系统/vim 快捷键与操作手册.md
2026-03-01 01:43:46 +08:00

31 KiB
Raw Permalink Blame History

LazyVim / Neovim 快捷键与操作手册

说明:本文是基于 LazyVim 的个人速查笔记,内容以“使用场景 → 快捷键 → 结果/备注”为主。

记号约定(尽量统一):

  • Ctrl-x 统一写作 <C-x>(例如 Ctrl-r<C-r>
  • Alt-x 统一写作 <A-x>
  • <Space> 表示 LazyVim 默认 <leader>

1. 常用模式切换与通用操作

快捷键 模式 作用与说明
<C-r> Insert 进入“寄存器”迷你模式,可选择寄存器内容粘贴
<C-r> + Insert 从系统剪贴板粘贴文本
<C-r> Normal 重做 (Redo),撤销上一次的 u 操作
"(双引号) Normal 指定后续操作(如 y, p)要使用的寄存器
gi Normal 跳转至上次进入 Insert 的位置,并重新进入 Insert
g Normal 进入 "Go To" 迷你模式,停顿会显示所有 g 开头命令

2. 代码导航(Getting Around

2.1 屏幕内快速跳转(flash.nvim / Seek

快捷键 模式 作用与说明
s Normal 进入 Seek 模式(flash.nvim):输入目标字符,按高亮标签跳转

2.2 屏幕与页面滚动

快捷键 模式 作用与说明
<C-d> Normal 向下滚动半屏 (Down)
<C-u> Normal 向上滚动半屏 (Up)
<C-f> Normal 向下滚动整页 (Forward)
<C-b> Normal 向上滚动整页 (Backward)
<C-e> Normal 向上滚动一行(光标不动)
<C-y> Normal 向下滚动一行(光标不动)
zt Normal 将当前行滚动到屏幕顶部 (Top)
zz Normal 将当前行滚动到屏幕中部 (Center)
zb Normal 将当前行滚动到屏幕底部 (Bottom)

2.3 光标移动(Motions

分类 快捷键 模式 作用与说明
基础移动 h / j / k / l Normal 左 / 下 / 上 / 右
计数移动 <数字><命令> Normal 重复执行命令 N 次;例:5j
行内查找 f<字符> Normal 向后查找并跳到第 1 个指定字符
<数字>f<字符> Normal 向后查找并跳到第 N 个指定字符
F<字符> Normal 向前查找字符
t<字符> / T<字符> Normal 向后/向前跳到指定字符的前一个/后一个位置
按词移动 w / W Normal 到下一个单词 / 大单词(空格分隔)开头
e / E Normal 到下一个单词 / 大单词结尾
b / B Normal 到上一个单词 / 大单词开头
ge Normal 到上一个单词结尾
行内跳转 0 Normal 行的绝对开头(第 0 列)
^ Normal 行的第一个非空白字符
$ Normal 行尾
g_ Normal 行的最后一个非空白字符
文件跳转 gg Normal 文件第一行
G Normal 文件最后一行
<数字>G:<数字> Normal 跳到指定行;例:100G
历史跳转 <C-o> Normal 跳回上一个光标位置
<C-i> Normal 前进到下一个光标位置(与 <C-o> 相反)

3. 文件操作与管理

3.1 文件选择器(Telescope

快捷键 模式 作用与说明
<Space><Space> Normal 查找项目文件 (Root),最常用
<Space>ff Normal 查找项目文件 (Root)
<Space>fF Normal 查找文件 (Cwd,当前工作目录)

选择器内常用操作:

  • Tab:标记多个文件
  • <A-s>:为条目添加标签,按标签字符快速选择
  • <C-d> / <C-u>:滚动结果列表

3.2 文件浏览器(Snacks.nvim Explorer

快捷键 模式 作用与说明
<Space>e Normal 打开文件浏览器 (Root)
<Space>E Normal 打开文件浏览器 (Cwd)
? 浏览器内 显示帮助(查看所有可用操作)
a / d / r 浏览器内 添加 / 删除 / 重命名 文件或文件夹
y / p / m 浏览器内 复制 / 粘贴 / 移动
qEsc 浏览器内 关闭浏览器

4. 配置与插件(LazyVim / Lazy Extras

4.1 LazyExtras 管理界面

命令/按键 模式 作用与说明
:LazyExtras Command 打开 Lazy Extras 管理界面
x LazyExtras 界面 安装或禁用选中的插件
s LazyExtras 界面 使用 Seek 模式快速跳转

4.2 LazyVim 的三类插件(心智模型)

  • 内置插件(默认启用):LazyVim 预装且预配置,通常默认不冲突;可自定义,但因集成深,偶尔需要技巧
  • Lazy Extras(可选增强):默认不启用;在 LazyVim 提供的“预期可协作”的配置下快速启用常见热门插件
  • 第三方未知插件(LazyVim 不特别支持):需要你从零配置,并自行排查键位/命令/UI 冲突;在 LazyVim 中通常数量较少

4.3 Lazy Extras 的启用与建议

  • 进入方式:
    • Dashboard 按 x;或命令 :LazyExtras
    • Dashboard 也可用 :lua Snacks.dashboard() 打开(可自行绑键)
  • 操作方式:
    • 列表中移动到目标 extra,按 x 启用/安装;在 Enabled 区对同一项按 x 可禁用/卸载(记忆:x = Extra)
    • 可能需要重启 Neovim,让 Lazy.nvim 识别并同步依赖
  • 建议:
    • 启用常用语言的 lang.* extras
    • 安装 “Recommended plugins”(带星标)
    • 非推荐 extras 先别装太多,可能带来行为变化且不易预期
  • 深入信息:lazyvim.org → Extras,可查看每个 extra 安装的插件与 LazyVim 提供的配置

4.4 禁用内置插件(或关闭内置插件的某个功能)

  • 配置目录通常为 $HOME/.config/nvimDashboard 按 c<Space>fc 可快速打开配置文件
  • LazyVim 约定:~/.config/nvim/lua/plugins/ 下任意 Lua 文件都会自动加载,文件名随意
  • 禁用某个内置插件:在 lua/plugins/*.lua 返回插件表并设置 enabled = false,例如禁用 bufferline
    • { "akinsho/bufferline.nvim", enabled = false }
  • 只关闭 Snacks.nvim 的某个功能而不是整个插件:
    • opts 里关闭对应 feature(如 explorer.enabled = false
    • 若要复用该功能占用的快捷键,可在 keys 中把对应键设为 false 以取消映射(例如 <leader>e<leader>E

4.5 修改键位:三种常见落点

  • lua/config/keymaps.lua:更偏核心/全局的键位(非特定插件)
  • 某插件的配置表里写 keys = { … }:通常用于“全局键位”来启动/调用插件
  • 某插件的 opts = { … }:很多插件倾向通过 opts 定义“插件窗口/模式内”的局部键位与行为

4.5.1 keys 条目的结构要点

  • keys 是 Lazy.nvim/LazyVim 的机制:用于声明键位并由管理器统一注册(不是传给插件本身)
  • 每条 keys 通常包含:
    • 键位(如 <leader>eLazyVim leader 通常是 <Space>
    • 回调(Lua function() … end)或命令字符串
    • desc 描述(用于 Space 菜单/提示)
  • 特殊键使用 <> 表示:如 <Right><Left>

4.5.2 LazyVim 的“合并(merge)”行为(关键理解)

  • 你在插件文件里写的 keysopts 会与 LazyVim(内置/extra)提供的默认配置进行合并
  • 若发生冲突(例如你重新定义了同一个键位),你的配置通常会覆盖默认值
  • 优点:无需复制整套默认配置,只写差异,升级更易维护
  • 代价:需要理解多来源键位/选项的叠加,冲突可能性更高

4.5.3 mini.files 示例背后的概念(打开位置与 root/cwd)

  • 需求示例:希望 mini.files 支持“在项目 root 打开”,并复用原本 Explorer 的键位
  • 概念区分:
    • root:根据项目标识文件(如 package.jsonCargo.toml)推断的项目顶层目录
    • cwd:编辑器当前工作目录(不一定等于 root)
  • 实现方式:在 lua/plugins/ 新增一个覆盖文件(作者习惯用 extend- 前缀)为 mini.files 增加/覆盖 keys,并可额外通过 opts 改 mini.files 窗口内映射与窗口尺寸等

4.5.4 当简单合并不够:opts 可以是函数

  • 如果你要改的是“列表插入/函数行为”等,单纯用表合并不够用
  • opts 可写成 function(_, opts) … end
    • 参数 opts 是 LazyVim 已生成的旧配置表
    • 你的函数要“就地修改”该表(不是返回新表)
  • 示例场景:给 Snacks dashboard 的 keys 列表用 table.insert 插入新入口(如 “Select Session”)

4.5.5 安装 LazyVim 不认识的第三方插件

  • lua/plugins/ 新建插件文件,返回一个表:
    • 第一个元素是 "owner/repo"
    • 再按需提供 optskeys
  • opts 的来源:
    • 通常等价于插件 README 中 setup({ … }) 需要的配置表;即使插件没写 Lazy.nvim 指南,也可直接把 setup 配置放进 opts
  • 若插件不自带键位:用 keys 声明并交由 Lazy.nvim 注册(常见做法是把键位与插件放在同一个文件,便于维护)
  • 插件发现渠道:rockerBOO/awesome-neovim(维护与清理较好)
  • 实务结论:LazyVim 已覆盖多数常用“最佳插件”(内置或 extra),你通常只需少量额外插件

4.5.6 小结

  • LazyVim 以“内置 / Extras / 第三方自理”的层级管理插件,提供合理默认配置并允许小幅覆盖
  • 日常改动主要落在 lua/plugins/:通过 enabledkeysopts(以及必要时 opts 函数)实现禁用、改键与改行为
  • 你需要重点掌握:键位与选项的合并规则、冲突处理、以及 root 与 cwd 的概念差异

5. 基础编辑(编辑模型与常用命令)

本节保留“长表格”形式,便于全文搜索与对照(语法模型 + 示例混排)。

分类 快捷键 模式 作用与说明
心智模型/语法 <count><motion> Normal 基本导航模型:计数 + 移动;count 通常表示重复次数;部分命令(如 G)把 count 当作绝对值;Seek 允许带 count 但会被忽略
心智模型/语法 <verb><count><motion> Normal 操作模型:先动词(operator/verb)再用 motion 指定范围;省略 verb 时默认是“只移动”
心智模型/语法 <count><verb><count><motion> Normal 理论上 verb 和 motion 都可带 count;实践中更常见 <count><verb><motion><verb><count><motion>
插入模式(模型边界) i/I/a/A + 可带 count(例:5ifoo<Esc> Normal → Insert → Normal 进入 Insert 不属于 motion/verb,但可用 count 重复插入文本;例:80i*<Esc> 快速插入 80 个 *;这类命令不能像 motions 那样和 verbs 组合
删除 d<motion> Normal 删除光标到 motion 目标之间文本;执行后仍在 Normal,便于继续组合其他 <verb><motion>
删除示例 dh Normal 删除光标左侧一个字符
删除示例 d3w Normal 删除 3 个词(按 w 的词移动定义)
删除示例 3dw Normal 删除 1 个词,重复 3 次(语义是重复 operator;结果通常等价于 d3w,但属于不同组合方式)
删除示例 d^ Normal 删除从光标到行首第一个非空白字符的位置(含义由 ^ motion 决定)
删除示例 d2fe Normal 删除到光标后第 2 个 e(包含该 e);f 是“到某字符并包含它”
删除示例 d2Ta Normal 删除到光标前第 2 个 a(不包含该 a);T 是“到某字符之前”
删除示例(Seek 结合) dsfoos Normal 使用 Seek 查找 foo 并选标签 s:删除当前光标与 Seek 跳转位置之间文本;Seek 总跳到匹配词开头:目标在光标后时会删到 f(可能不含 oo),目标在光标前时可能连 foo 三字母都被删掉。注意:录宏时不建议用 Seek(回放无法理解标签)
修改(删除后进入插入) c<motion> Normal → Insert “change”:删除范围并立即进入 Insert;与 d<motion> 再进入插入相比更省键;也使 . 能完整重复“删除 + 插入”
行尾操作(按模型) d$ / c$ Normal / Normal → Insert 删除/修改从光标到行尾;$ 是到行尾的 motion
行尾操作(快捷) D / C Normal / Normal → Insert D 等价 d$C 等价 c$
行首方向(无单键反向快捷) d^ / d0 Normal d^ 删到第一个非空白字符,或用 d0 删到第 1 列(无视空白)
整行操作(重复动词) dd Normal 删除整行(“重复 verb”作为整行范围的特殊写法;motion 含义依赖 verb,算模型的一个“破例”)
整行操作(重复动词) cc Normal → Insert 删除整行并进入 Insert,重写这一行
整行计数 d3d / 3dd Normal 删除 3 行:两种写法都可;3dd 通常更好按
单字符删除(按模型) dl / 4dl Normal dl 删除光标下字符(用 l 作为 motion);4dl 删除 4 个字符
单字符删除(快捷) x / 5x Normal x 删除光标下 1 字符;可带 count
反向单字符删除 X Normal 删除光标左侧字符;可带 count
单字符替换 r{char} Normal(短暂进入插入后立刻回 Normal) 替换光标下字符为接下来输入的 1 个字符;r 可带 count(会把若干字符都替换为同一个字符)
合并行(删除换行) J Normal Join Lines:合并当前行与下一行(删除行尾换行);可带 count;通常会“智能处理空白”
合并行(不改空白) gJ Normal 合并行但不做空白规范化(更“原样”)
大小写:转大写范围 gU<motion> Normal 把范围文本转为大写(这里 gU 是 verb
大小写:转小写范围 gu<motion> Normal 把范围文本转为小写
大小写:反转单字符 ~ Normal 反转光标下字符的大小写
大小写:整行 gUU / guu Normal 通过“重复动词”把整行转为大写/小写
重复上次编辑 . Normal dot repeat:重复上一次“verb 操作”(包括 c 的删除范围 + 插入内容)
. 的计数细节 <count>.(例:2. Normal . 带 count 时不会简单“重复 N 次”,而是会替换被重复命令内部的 count;例:先 3dd,再 2. 会变为删除 2 行
宏录制:开始 qq Normal 开始录制宏;可录制导航、编辑、插入、搜索、甚至 : 命令序列;注意:不要在宏里用 Seek
宏录制:结束 q Normal 停止录制并保存当前宏
宏录制:追加 qQ Normal 以追加方式继续录制到同一宏;需要确保光标位置使“拼接后的宏”逻辑成立
宏回放(最近一次) Q Normal 回放最近保存的录制宏;多个宏可用寄存器管理(寄存器章节待补)
撤销 u Normal 撤销最近一次改动;一次“改动”可能很大(长时间未退出 Insert 时尤其明显)
重做 <C-r> Normal 重做(redo)撤销的改动
Undo 历史分支(概念/建议) :help undo-branches / undotree 插件 Normal Neovim 记录完整历史并支持类似“分支”的撤销树;少数复杂场景 undotree 很有帮助

6. 速查表(LazyVim / Neovim

6.1 句子/段落移动(Vim 原生 Motions

目标 按键(Normal 含义/落点 计数 备注
下一句 ) 跳到下一句(句末标点 .?! 后的空白之后的第一个字符) 3) 也会在空行(段落边界)停下
上一句/当前句首 ( 跳到当前句开头/上一句 2( (/) 和“句子”强绑定
下一段 } 跳到下一段(空行分隔的块) 5} 写代码很常用
上一段 { 跳到上一段 3{ {/} 不是跳到花括号字符本身

6.2 Unimpaired 风格方括号导航([ / ] 系列)

场景 按键 做什么 依赖/来源 重要备注/坑
打开提示菜单 [](按一下停顿) 弹出可用组合菜单 LazyVim 用来“记不住时查一下”
跳出括号块(到未匹配的括号) [{ ]} [( ]( [< ]< 跳到上一/下一层的“括号边界”(像 jump out) LazyVim 的 unimpaired 行为 不是找下一个字符;找字符用 f{ / F{
跳到“包围我的那种括号”的边界 [% / ]% 对当前所在的 (){}<>[] 自动识别并跳到开头/结尾 LazyVim [[/]] 不用于跳出 [];跳出方括号常靠 %/[%/]%

6.3 同文件引用跳转(符号引用)

场景 按键 做什么 依赖 备注
下一个引用 ]] 跳到光标下变量/函数在同文件的下一处真实引用 通常 LSP 比搜索更准;LazyVim 会高亮其他引用
上一个引用 [[ 跳到上一处真实引用 通常 LSP [[/]] 被保留给“引用跳转”,不是“跳出方括号”

6.4 按语言结构跳转(类/函数/方法)

目标 跳到开始 跳到结束(Shift 依赖 备注
class/type [c / ]c [C / ]C LSP/语法能力 质量取决于语言与 LSP 配置
function [f / ]f [F / ]F LSP/语法能力 ]F 可能先跳到嵌套函数结尾(不是“跳出当前函数”)
method [m / ]m [M / ]M LSP/语法能力 同上

6.5 缩进层级跳转(Indent

场景 按键 做什么 依赖/来源 适用
跳到当前缩进层顶部/底部 [i / ]i 跳出当前缩进层(到该缩进引导线的顶/底) snacks.indent Python、HTML/JSX/Svelte 等

6.6 诊断(Diagnostics)、拼写、TODO

场景 上一个 下一个 备注
所有诊断(error/warn/hint [d ]d 常用“跳到下一条波浪线/提示”
仅 error [e ]e 忽略 warning/hint
仅 warning [w ]w 只在警告间跳转
拼写错误(spell [s ]s 拼写不算 diagnostic;别指望 ]d 去拼写波浪线
TODO/FIXME [t ]t 在注释标记间跳转

限制:诊断/某些跳转通常不能和动词组合(例如 d[d 不会“删到上一条诊断”)。

6.7 Git 修改块(Hunk

场景 上一个 下一个 做什么 备注
跳转 git hunk [h ]h 在未暂存/未提交的改动块间跳转 同样一般不能和动词组合

6.8 文本对象(Text Objects)与 Operator-Pending 语法

6.8.1 基本语法(最重要)

语法 解释 例子
<verb><a/i><object> 动词 + 语境 + 对象 di(dawcipyig
iinside 只作用于对象内部 di( 删除括号内,保留括号
aaround 作用于对象及其边界/相关空白 da( 删除括号+内容;daw 会顺带处理空格更自然

6.8.2 文本类对象(word/sentence/paragraph

对象 iinside)例 aaround)例 差异要点
word diw daw a 往往会吃掉一侧空白,删除后更不留多余空格
WORD(空白分隔) diW daW 不把标点当边界
sentence dis das a 更会“对齐”句子周围空白
paragraph dip dap a 往往会连多余空行一起处理

6.8.3 引号/括号对象

目标 inside(保留边界) around(含边界) 备注
双引号 ci" / di" ca" / da" c 会进入插入模式
单引号 ci' da' 同理
反引号 ci` da` 同理
任意最近引号 ciq / diq caq / daq q 会自动判断 `"'`` 哪个最近
圆括号 di( da( 也可用于 ) 作为对象字符
花括号 di{ da{ 同理
方括号 di[ da[ 同理
尖括号 di< da< 常用于泛型/标签等

6.8.4 “最近的包围括号”快捷对象

对象 含义 例子
b bracket:最近的包围对(括号类) dib / cab

6.8.5 计数:第 N 层包围(count 放在 a/i 前)

写法 含义 例子
d2a{ 对第二层外侧的 {…} 执行删除(含花括号) 光标在深层对象内,删外层 block
c3i( 改第三层外侧 (…) 的内部(保留括号) 复杂嵌套时用

6.8.6 整个文件(buffer)对象

目标 按键 含义
entire bufferinside yig 复制整个文件内容
entire bufferaround cag / dag 作用于整个 buffer(常用 cag 直接清空重写)

6.8.7 语言结构类文本对象(LazyVim 扩展)

对象字母 含义 示例(动词+对象)
c class/type dac / cic
f function/method yaf / dif
o objectblock/loop/conditional 等) cao / dio
t tagHTML/JSX dat / cit
i scope(缩进层级) dai / cii

6.8.8 Git hunk 文本对象

对象 用法 含义
h dih 对整个 git hunk 执行操作(例如删除该改动块)

6.8.9 “附近对象”扩展(mini.ai):Next / Last

前缀 含义 示例 作用
n next cin{ 不必先把光标移入对象,直接操作“下一个 {} 对象内部”
l last dil" 操作“上一个”对象(靠近光标)

6.9 flash.nvimS / R / r(对象选择)

功能 按键形态 做什么 备注
就地选“周围对象” <verb>S 给光标周围结构打成对标签,选中后对标签之间范围操作 不需要 a/i
远程选“周围对象” <verb>R 先远程定位匹配,再切到“周围对象成对标签”选择范围 R = Remote(大写是 surround 对象模式)
远程定位后继续选任意对象 <verb>r 远程 Seek 到某标签后回到 operator-pending,再输入如 aw/i( 等;完成后光标回原位 小写 r = Remote(普通 seek

6.10 mini.surround(可选 Extra):包围符/标签的增删改

说明:mini.surround 常作为 LazyVim 推荐 Extra;未必默认安装。

6.10.1 添加包围(Add

目标 按键 说明 例子效果
添加包围 gsa +(motion/对象)+(包围字符) 先选范围,再输入要包围的字符 gsa$":从光标到行尾加 ""
( vs ) 作为包围字符时 ( 会在内部加空格;) 不加 [foo]gsai[([( foo )];经 gsai[)[(foo)]

6.10.2 删除包围(Delete

目标 按键 说明
删除某种包围对 gsd + 字符 gsd[ 删除当前所在 []
删除第 N 层外侧 <count>gsd + 字符 2gsd{ 删除第二层外侧 {}

6.10.3 替换包围(Replace

目标 按键 例子
替换包围符 gsr + 旧 + 新 gsr"'"hello"'hello'

6.10.4 仅跳转/查看包围边界

功能 按键 说明
括号匹配跳转 % 在括号端点上跳到匹配端;不支持引号类
跳到最近左/右包围符 g[ + 字符 / g] + 字符 例:g[(g]];可加 count 跳多层
高亮包围(检查用) gsh + 字符 例:gsh( 用于“干跑”确认层级

6.10.5 HTML/XML Tag 包围(Bonus

目标 按键 说明
段落外包标签 gsaapt ap 选段落,t 表示 tag;随后输入标签名(如 p),可带属性

7. Buffers 与布局(Buffers and Layouts

7.1 概念速查(一定先分清)

概念 Vim/Neovim 的含义 你可能误以为 关键点/坑
Server Neovim 可作为“服务端”,允许多个客户端连接同一实例 不常见概念 一般不用管;但可做到连接已有 nvim 实例而不是新开
Client 你运行的 Neovim 程序(终端 nvim、或 Neovide/VimR 等 GUI “就是 Neovim” 一个 client 通常连自己的 server,也可连已有/远程
Tab 一套“全屏布局”(更像 Layout/Workspace VS Code 的 tab 条 Tab 之间布局可不同;一次只显示一个 tab;所有 tab 共享 buffers
Window 分屏/窗格/Pane/Split(屏幕区域) OS 窗口 一个 window 显示一个 buffer 的“视图”;浮窗是例外(picker 等)
Buffer 已打开的文件内容实例(内存中的编辑对象) Tab 同一文件只有一个底层 buffer;可在多个 window/tab 同时显示
Fold 折叠:把一段代码收成一行隐藏起来 “缩进/大纲” 只影响视图显示;可嵌套折叠
File 磁盘上的文件 Buffer buffer 未保存时内容可与磁盘不一致;也可有无文件 buffer(scratch

7.2 Buffer(缓冲区)速查

7.2.1 切换 Buffer

操作 快捷键 说明/记忆法
下一个/上一个 buffer(按 bufferline 顺序) L / H Shift-l/rightShift-h/left
下一个/上一个 buffer(同上) ]b / [b 方括号系列
当前文件 ↔ 当前窗口最近的另一个文件(alternate file <Space><Backtick> 快速来回切两个文件
用列表过滤选择已打开 buffers <Space><comma> buffer picker:适合 buffer 很多时

7.2.2 关闭 Buffer(不删磁盘文件)

操作 快捷键 说明/记忆法
关闭当前 buffer(保留分屏) <Space>bd b=buffer 子菜单,d=delete(删的是 buffer
关闭当前 buffer + 关闭所在分屏 <Space>bD D 更大力度
关闭左侧所有 buffers <Space>bl left
关闭右侧所有 buffers <Space>br right
只保留当前 buffer,其他全关 <Space>bo only
删除所有未 pin 的 buffers <Space>bP 批量清理
pin/取消 pin 当前 buffer <Space>bp 防止被 <Space>bP 清掉
在 buffer picker 中关闭光标所在项 <C-x> 仅在 <Space><comma> 列表里

7.2.3 Scratch Buffer(临时笔记)

操作 快捷键 说明
打开/回到当前 cwd 的 scratch <Space>.. 按工作目录(cwd)绑定;重开 nvim 也还在
关闭 scratch 浮窗 q 需在 Normal 模式(通常先 <Escape>
列出所有 scratch(可选不同 cwd/分支) <Space>S picker 列表

7.3 Window(分屏)速查

7.3.1 Window 子菜单入口

操作 快捷键 说明
打开 window 菜单 <Space>w LazyVim 统一入口
传统入口 <C-w> Vim 默认体系;LazyVim 也增强了它

7.3.2 创建分屏

操作 快捷键 说明/记忆法
垂直分屏(左右) <Space>wv v=vertical
水平分屏(上下) <Space>ws s=split
垂直分屏(替代键) ` `
水平分屏(替代键) <Space>- - 像横线

7.3.3 打开文件时直接分屏(Explorer/Picker

场景 快捷键 结果
Snacks explorer 打开文件 <Enter> 当前窗口打开
Snacks explorer 垂直分屏打开 <C-v> 右侧/新列打开
Snacks explorer 水平分屏打开 <C-s> 下方/新行打开
Snacks 各种 picker <C-v> / <C-s> 同样可用
mini.files 打开到分屏 <Space>wv / <Space>ws 用“正常窗口分屏键”完成

7.3.4 在窗口间移动

操作 快捷键 说明
向左/下/上/右窗口移动 <C-h> / <C-j> / <C-k> / <C-l> 支持 count,可跨过窗口
同上(which-key 风格) <Space>wh/wj/wk/wl <Space>w 再方向

7.3.5 关闭窗口(只关分屏,不关 buffer)

操作 快捷键 行为差异
关闭窗口;若是唯一窗口则退出 Neovim <Space>wq q=quit
关闭窗口;若是唯一窗口则拒绝并报错 <Space>wc c=close
删除窗口(与 wc 实质相同) <Space>wd d=delete(对称 <Space>bd
只保留当前窗口,关闭其他分屏 <Space>wo only window

7.3.6 调整窗口大小

操作 快捷键 说明
增加/减少高度(水平分屏) <Space>w+ / <Space>w- 每次 1 行;常配合 count
增加/减少宽度(垂直分屏) <Space>w> / <Space>w< 每次 1 列;常配合 count
所有窗口等宽等高 <Space>w= 均分布局

7.3.7 Hydra(窗口命令连发)

操作 快捷键 说明
进入 window Hydra 模式 <Space>w<Space> 固定窗口菜单,可连续按多条命令
退出 Hydra <Escape> 回普通编辑

7.3.8 Zen / Zoom

模式 快捷键 作用
Zen mode <Space>uz 中央专注窗口、背景变暗、只在光标附近保留高亮(snacks.nvim
Zoom mode <Space>uZ 临时只显示当前窗口最大化

7.4 Tab(标签页/布局)速查

操作 快捷键 说明
打开 Tab 菜单 <Space><Tab> LazyVim tab 子菜单
新建 tab <Space><Tab><Tab> 连按两次 Tab(第二次是动作)
把当前 split “移到”新 tab <Space>wT T 大写;当前窗口在原 tab 消失,新 tab 里出现
下一个/上一个 tabVim 默认) gt / gT tab 导航
切换 tabLazyVim <Space><Tab>] / <Space><Tab>[ 右 / 左
跳到第 N 个 tab Ngt 例:3gt 去 tab 3
关闭当前 tab(方式 1 关闭该 tab 最后一个窗口(如 <Space>wq tab 自动消失
关闭 tab(方式 2 <Space><Tab>d 关 tab 的所有窗口 + tabbuffers 仍保留
关闭 tab(方式 3 点击 tab 区域右侧 X bufferline 右侧数字旁

位置提示:tab 编号显示在 bufferline 最右侧;左侧那些“像标签页”的是 buffers,不是 tabs。

7.5 Folding(代码折叠,z 系列)

操作 快捷键 说明/记忆
折叠当前区域 zc c=collapse
打开当前折叠 zo o=open
折叠/打开切换 za a=toggle
打开所有折叠 zR 全展开
递归打开(含嵌套) zO O=更强力的 open

7.6 Session(会话,恢复现场)

操作 快捷键/流程 说明
退出并保存会话 <Space>qq 默认启用 session;退出即记录
从 dashboard 恢复 打开 nvim 后按 s 回到上次关闭时的 buffers/tabs/splits
dashboard 不在时恢复 <Space>qs 恢复到上次退出时状态
选择最近项目并恢复会话 <Space>qS picker:选目录后自动 :cd 并加载对应 session
本次不更新/不覆盖 session <Space>qd 临时打开 nvim 时防止覆盖旧 session
会话作用域 按 cwd(目录) 进入项目前先 cd,或在 nvim 里 :cd

8. 附录

8.1 普通 Vim 示意图