-
Notifications
You must be signed in to change notification settings - Fork 0
nvim learn 03 advanced commands
ES edited this page Jul 16, 2026
·
1 revision
进阶内容:g / z / m 前缀命令、宏与寄存器、窗口管理、实用开发技巧
Neovim 最丰富的组合前缀,涵盖跳转、大小写、显示等:
| 按键 | 英文助记 | 作用 |
|---|---|---|
gg |
go | 文件第一行 |
gd |
definition | 跳到局部定义(LSP: go to definition) |
gD |
Declaration | 跳到全局声明(LSP: go to declaration) |
gf |
file | 打开光标下的文件路径 |
gx |
external | 用系统程序打开光标下的 URL / 文件 |
gi |
insert | 跳回上次退出插入模式的位置,并进入插入 |
gv |
visual | 重新选中上次的 Visual 选区 |
g; / g,
|
前后方向符号 | 修改列表 后退 / 前进(跳到上次编辑的位置) |
gj / gk
|
方向键布局 | 在自动换行的长行内按视觉行上下移动 |
g0 / g$ / g^
|
行首 / 行尾符号 | 视觉行的行首 / 行尾 / 首个非空字符 |
gn |
next | 选中下一个搜索匹配(配合 . 逐个替换) |
| 按键 | 作用 |
|---|---|
gu{motion} |
转小写(如 guiw 当前词小写) |
gU{motion} |
转大写(如 gUiw 当前词大写) |
g~{motion} |
翻转大小写 |
guu / gUU / g~~
|
整行操作 |
| 按键 | 作用 |
|---|---|
ga |
显示光标下字符的 ASCII / Unicode 编码 |
gJ |
合并行,不加空格(J 会加空格) |
gq{motion} |
按 textwidth 重排文本 |
gw{motion} |
同 gq 但光标位置不动 |
g Ctrl-a |
Visual 模式下生成递增序列(见技巧部分) |
控制滚动、折叠、拼写:
| 按键 | 作用 |
|---|---|
zz |
当前行居屏幕中间 |
zt |
当前行居屏幕顶部(top) |
zb |
当前行居屏幕底部(bottom) |
zH / zL
|
水平滚动半屏(H / L 对应左 / 右) |
| 按键 | 作用 |
|---|---|
zo / zc
|
open / close:打开 / 关闭当前折叠 |
za |
alternate:切换当前折叠 |
zO |
Open recursively:递归打开所有嵌套折叠 |
zA |
Alternate recursively:递归切换 |
zR |
切换文件中所有折叠 |
zC / zI
|
Comment / Import:切换注释 / 导入折叠 |
zK |
Kind:选择一种折叠类型后切换 |
zj / zk
|
方向键布局:跳到下 / 上一个折叠 |
需先 :set spell 开启:
| 按键 | 作用 |
|---|---|
z= |
显示拼写建议 |
zg |
good:将光标下单词加入好词字典 |
zw |
wrong:将光标下单词标记为错词 |
]s / [s
|
spell:跳到下 / 上一个拼写错误 |
| 按键 | 作用 |
|---|---|
m{a-z} |
在当前缓冲区设置局部标记 |
m{A-Z} |
设置全局标记(跨文件有效) |
`{mark} |
跳到标记的精确位置(行 + 列) |
'{mark} |
跳到标记所在行首 |
`. |
跳到上次修改的精确位置 |
`" |
跳到上次离开此文件时的位置 |
'' |
跳回上次跳转前的位置 |
:marks |
列出所有标记 |
:delmarks a-d |
删除标记 a 到 d |
:delmarks! |
删除所有小写标记 |
使用场景:阅读代码时用 ma 标记当前位置,跳到别处查看后 `a 回来
录制一系列操作,批量重复:
qa 开始录制到寄存器 a
...操作... 例如:0f"ci"new_value<Esc>j
q 停止录制
@a 回放宏 a
@@ 重复上次回放的宏
10@a 执行 10 次
技巧:
- 录制前先
0回行首,确保宏从确定位置开始 - 用
j结尾让宏自动移到下一行,便于批量执行 -
"ap可以粘贴宏内容(宏就是寄存器),"ayy可以编辑后重新载入
Vim 有多个"剪贴板",互不干扰:
| 寄存器 | 说明 |
|---|---|
" |
默认寄存器(d / c / y 都写入这里) |
0 |
上次 yank 专用(不受 d / c 影响) |
a-z |
命名寄存器(手动指定) |
A-Z |
追加到对应小写寄存器("Ayy 追加一行到 a) |
+ |
系统剪贴板 |
_ |
黑洞寄存器(删除但不存) |
/ |
上次搜索模式 |
. |
上次插入的文字 |
: |
上次执行的命令 |
用法:
| 操作 | 按键 |
|---|---|
| 复制到寄存器 a | "ayiw |
| 从寄存器 a 粘贴 | "ap |
| 粘贴上次 yank 的内容 |
"0p(不被删除覆盖) |
| 复制到系统剪贴板 | "+y |
| 从系统剪贴板粘贴 | "+p |
| 删除但不存 | "_d{motion} |
| 查看所有寄存器 | :reg |
| 操作 | 按键 |
|---|---|
| 焦点切换(四方向) | Ctrl+Alt+h/j/k/l |
| 调整大小(四方向) | Ctrl+Alt+←/↓/↑/→ |
Kitty、WezTerm 与 Ghostty 使用统一键位。native 模式下由终端和 smart-splits 在 Neovim 窗口与终端 pane 之间导航;tmux 模式下由 tmux 接管 pane,并与 Neovim 保持相同操作方式
| 操作 | 按键 |
|---|---|
| 水平分屏 |
Ctrl-w s 或 :sp
|
| 垂直分屏 |
Ctrl-w v 或 :vsp
|
| 窗口间导航 | Ctrl-w h/j/k/l |
| 循环切换窗口 | Ctrl-w w |
| 关闭当前窗口 | Ctrl-w q |
| 只保留当前窗口 | Ctrl-w o |
| 均分窗口 | Ctrl-w = |
| 调整窗口高度 |
Ctrl-w + / Ctrl-w -
|
| 调整窗口宽度 |
Ctrl-w > / Ctrl-w <
|
| 最大化高度 | Ctrl-w _ |
| 最大化宽度 | Ctrl-w | |
| 命令 | 作用 |
|---|---|
:e {file} |
打开文件 |
:bn / :bp
|
下一个 / 上一个 buffer(Neovim 0.11+ 可直接用 ]b / [b) |
[B / ]B
|
第一个 / 最后一个 buffer(Neovim 内置) |
:bd |
关闭当前 buffer |
:ls |
列出所有 buffer |
:b {name} |
按名称切换(支持 Tab 补全) |
:b {n} |
按编号切换 |
| 按键 | 模式 | 作用 |
|---|---|---|
Ctrl-d / Ctrl-u
|
Normal | 半页下 / 上滚动 |
Ctrl-f / Ctrl-b
|
Normal | 整页下 / 上滚动 |
Ctrl-o / Ctrl-i
|
Normal | 跳转列表 后退 / 前进 |
Ctrl-r |
Normal | 重做 |
Ctrl-a / Ctrl-x
|
Normal | 数字 +1 / -1 |
Ctrl-g |
Normal | 显示文件信息和光标位置 |
Ctrl-o |
Insert | 临时执行一个 Normal 命令后返回插入 |
Ctrl-r {reg} |
Insert | 插入寄存器内容 |
Ctrl-w |
Insert | 删除光标前一个单词 |
Ctrl-u |
Insert | 删除光标前到行首 |
Ctrl-v |
Insert | 输入原始字符(如 Ctrl-v Tab 插入制表符) |
Ctrl-\ Ctrl-n
|
Terminal | 退出终端模式回到 Normal |
几乎所有命令都可以加数字前缀:5j(下移 5 行)、3dd(删 3 行)、2yy(复制 2 行)、10@a(执行宏 10 次)
. 重复的是"上次完整修改"(从开始修改到 Esc),设计操作时尽量让 . 可以复用:
ciw新名字<Esc> 修改一个单词
w. 跳到下一个词再改(如果要改成同样的)
Ctrl-v 进入块可视模式
j j j 选择多行
I 在块左侧插入(输入文字后按 Esc,所有行同时生效)
A 在块右侧追加
d 删除选中的块
c 修改选中的块
选中多行数字 0 0 0 0(每行一个)
g Ctrl-a
→ 变成 1 2 3 4
Visual 选中多行后 :sort 正序
:sort! 倒序
:sort u 去重排序
:sort n 按数字排序
| 命令 | 作用 |
|---|---|
:!ls |
执行 ls 并显示结果 |
:r !date |
将 date 输出插入到光标下方 |
:%!jq . |
用 jq 格式化整个文件(JSON) |
Visual 选中后 !sort
|
用外部 sort 排序选中行 |
:verbose nmap <leader>ff " 查看 <leader>ff 被谁定义、在哪个文件
:nmap <leader> " 列出 leader 前缀下所有映射
:imap <C- " 列出 Insert 模式下 Ctrl 开头的映射比 :%s 更灵活,可以逐个决定是否替换:
/old_name 搜索
cgn 选中匹配并修改为... new_name <Esc>
n 跳到下一个(不改)
. 改这个
. 改这个
n 跳过
以上是 Neovim 使用技能。如果你想学习如何配置 Neovim,请看:
- Keymap Guide — 如何定义和调试快捷键
- Lua Config — Lua 模块系统与配置加载
-
AGENTS.md — 插件注册(基于
vim.pack+ 单文件 spec)