Skip to content

nvim learn 03 advanced commands

ES edited this page Jul 16, 2026 · 1 revision

03 高级命令与开发技巧

进阶内容:g / z / m 前缀命令、宏与寄存器、窗口管理、实用开发技巧


1. ggo)前缀

Neovim 最丰富的组合前缀,涵盖跳转、大小写、显示等:

1.1 跳转

按键 英文助记 作用
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 选中下一个搜索匹配(配合 . 逐个替换)

1.2 大小写

按键 作用
gu{motion} 转小写(如 guiw 当前词小写)
gU{motion} 转大写(如 gUiw 当前词大写)
g~{motion} 翻转大小写
guu / gUU / g~~ 整行操作

1.3 其他

按键 作用
ga 显示光标下字符的 ASCII / Unicode 编码
gJ 合并行,不加空格(J 会加空格)
gq{motion} textwidth 重排文本
gw{motion} gq 但光标位置不动
g Ctrl-a Visual 模式下生成递增序列(见技巧部分)

2. z 前缀(无固定缩写)

控制滚动、折叠、拼写:

2.1 滚动 / 居中

按键 作用
zz 当前行居屏幕中间
zt 当前行居屏幕顶部(top)
zb 当前行居屏幕底部(bottom)
zH / zL 水平滚动半屏(H / L 对应左 / 右)

2.2 折叠

按键 作用
zo / zc open / close:打开 / 关闭当前折叠
za alternate:切换当前折叠
zO Open recursively:递归打开所有嵌套折叠
zA Alternate recursively:递归切换
zR 切换文件中所有折叠
zC / zI Comment / Import:切换注释 / 导入折叠
zK Kind:选择一种折叠类型后切换
zj / zk 方向键布局:跳到下 / 上一个折叠

2.3 拼写检查

需先 :set spell 开启:

按键 作用
z= 显示拼写建议
zg good:将光标下单词加入好词字典
zw wrong:将光标下单词标记为错词
]s / [s spell:跳到下 / 上一个拼写错误

3. mmark)标记系统

按键 作用
m{a-z} 在当前缓冲区设置局部标记
m{A-Z} 设置全局标记(跨文件有效)
`{mark} 跳到标记的精确位置(行 + 列)
'{mark} 跳到标记所在行首
`. 跳到上次修改的精确位置
`" 跳到上次离开此文件时的位置
'' 跳回上次跳转前的位置
:marks 列出所有标记
:delmarks a-d 删除标记 a 到 d
:delmarks! 删除所有小写标记

使用场景:阅读代码时用 ma 标记当前位置,跳到别处查看后 `a 回来


4. 宏(Macros)

录制一系列操作,批量重复:

qa        开始录制到寄存器 a
...操作... 例如:0f"ci"new_value<Esc>j
q         停止录制
@a        回放宏 a
@@        重复上次回放的宏
10@a      执行 10 次

技巧

  • 录制前先 0 回行首,确保宏从确定位置开始
  • j 结尾让宏自动移到下一行,便于批量执行
  • "ap 可以粘贴宏内容(宏就是寄存器),"ayy 可以编辑后重新载入

5. 寄存器(Registers)

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

6. 窗口与分屏

6.1 快捷操作(smart-splits,与终端复用器统一)

操作 按键
焦点切换(四方向) Ctrl+Alt+h/j/k/l
调整大小(四方向) Ctrl+Alt+←/↓/↑/→

Kitty、WezTerm 与 Ghostty 使用统一键位。native 模式下由终端和 smart-splits 在 Neovim 窗口与终端 pane 之间导航;tmux 模式下由 tmux 接管 pane,并与 Neovim 保持相同操作方式

6.2 原生命令

操作 按键
水平分屏 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 |

7. 缓冲区(Buffer)

命令 作用
:e {file} 打开文件
:bn / :bp 下一个 / 上一个 buffer(Neovim 0.11+ 可直接用 ]b / [b
[B / ]B 第一个 / 最后一个 buffer(Neovim 内置)
:bd 关闭当前 buffer
:ls 列出所有 buffer
:b {name} 按名称切换(支持 Tab 补全)
:b {n} 按编号切换

8. Ctrl 组合键速查

按键 模式 作用
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

9. 开发实用技巧

9.1 数字前缀

几乎所有命令都可以加数字前缀:5j(下移 5 行)、3dd(删 3 行)、2yy(复制 2 行)、10@a(执行宏 10 次)

9.2 . 重复 — 最核心的效率技巧

. 重复的是"上次完整修改"(从开始修改到 Esc),设计操作时尽量让 . 可以复用:

ciw新名字<Esc>    修改一个单词
w.                跳到下一个词再改(如果要改成同样的)

9.3 列编辑(块操作)

Ctrl-v     进入块可视模式
j j j      选择多行
I          在块左侧插入(输入文字后按 Esc,所有行同时生效)
A          在块右侧追加
d          删除选中的块
c          修改选中的块

9.4 递增序列

选中多行数字 0 0 0 0(每行一个)
g Ctrl-a
→ 变成 1 2 3 4

9.5 排序

Visual 选中多行后 :sort       正序
                   :sort!      倒序
                   :sort u     去重排序
                   :sort n     按数字排序

9.6 执行 Shell 命令

命令 作用
:!ls 执行 ls 并显示结果
:r !date 将 date 输出插入到光标下方
:%!jq . 用 jq 格式化整个文件(JSON)
Visual 选中后 !sort 用外部 sort 排序选中行

9.7 查键位来源

:verbose nmap <leader>ff    " 查看 <leader>ff 被谁定义、在哪个文件
:nmap <leader>              " 列出 leader 前缀下所有映射
:imap <C-                   " 列出 Insert 模式下 Ctrl 开头的映射

9.8 cgn 逐个替换

:%s 更灵活,可以逐个决定是否替换:

/old_name     搜索
cgn           选中匹配并修改为... new_name <Esc>
n             跳到下一个(不改)
.             改这个
.             改这个
n             跳过

下一步

以上是 Neovim 使用技能。如果你想学习如何配置 Neovim,请看:

  • Keymap Guide — 如何定义和调试快捷键
  • Lua Config — Lua 模块系统与配置加载
  • AGENTS.md — 插件注册(基于 vim.pack + 单文件 spec)

Clone this wiki locally