Vim 提供了大量的快捷键和命令来加速文本编辑,帮助你更高效地工作。以下是一些常用的 Vim 快捷键,帮助你提高工作效率:

光标移动相关

  • h:向左移动一个字符。
  • j:向下移动一行。
  • k:向上移动一行。
  • l:向右移动一个字符。
  • w:跳到下一个单词的开头。
  • e:跳到当前或下一个单词的末尾。
  • b:跳到前一个单词的开头。
  • 0:跳到当前行的开头。(数字0, 字母 O 是会有不一样的效果)
  • $:跳到当前行的末尾。
  • gg:跳到文件的开头。
  • G:跳到文件的末尾。
  • ^ 会跳到当前行的第一个非空字符。
  • Ctrl + u:向上滚动半屏。
  • Ctrl + d:向下滚动半屏。
  • Ctrl + f:向前滚动一屏。
  • Ctrl + b:向后滚动一屏。

文本选择和操作

  • v:进入可视模式,选择字符。
  • V:进入可视行模式,选择整行。
  • Ctrl + v:进入块选择模式,选择列。
  • y:复制选中的文本(yank)。
  • d:删除选中的文本(delete)。
  • p:粘贴(paste)已复制或删除的文本。
  • P:将粘贴的文本插入光标前。

文本修改

  • i:进入插入模式,在光标前插入文本。
  • I:进入插入模式,在行首插入文本。
  • a:进入插入模式,在光标后插入文本。
  • A:进入插入模式,在行尾插入文本。
  • o:在当前行下方插入新行。
  • O:在当前行上方插入新行。
  • ciw:删除当前单词并进入插入模式(修改当前单词)。
  • cw:删除当前单词的一部分并进入插入模式。
  • C:删除光标到行尾的内容,并进入插入模式。
  • x:删除光标处的一个字符。
  • X:删除光标前一个字符。
  • r:替换一个字符。
  • R:进入替换模式,替换多个字符。
  • gcc:注释或取消注释当前行。如果当前行已注释,使用此命令将取消注释。
  • gc:注释或取消注释选中的文本。你可以先进入可视模式(vV),然后选择需要注释的部分,最后按 gc 来注释或取消注释。

撤销与重做

  • u:撤销(undo)上一次操作。
  • Ctrl + r:重做(redo)上一次撤销的操作。
  • :earlier [time]:撤销到指定时间点。
  • :later [time]:恢复到指定时间点。
  • . 代表 “重复上一个修改操作”,即重复你上次执行的编辑命令。

跳转到定义

如果你想跳转到 定义(Definition),可以使用:

  • 快捷键
    • gd(在 Neovim 中)
    • gf (跳转对应文件)
    • gx (用默认应用打开,一般用于打开链接)
    • F12(在 VSCode 默认键位)
    • Ctrl + 左键点击(在 VSCode UI)

搜索和替换

  • /pattern:向下搜索 pattern
  • ?pattern:向上搜索 pattern
  • n:跳转到下一个搜索结果。
  • N:跳转到上一个搜索结果。
  • :%s/old/new/g:替换文件中所有的 oldnew
  • :s/old/new/g:替换当前行的所有 oldnew
  • :s/old/new/gc:替换当前行的所有 oldnew,并询问是否替换。

vim 中,当你进入 Visual Mode(无论是字符模式 v 还是块模式 Ctrl-v),并且选择了一个单词后,按 r 来替换字符,默认情况下你只能替换为一个单个字符。如果你想替换为一个完整的单词(比如 test),你需要执行以下步骤:

1. 选择单词

  • 使用 vCtrl-v 进入选择模式。
  • 使用光标选择你要替换的单词或区域。

2. r 然后输入单个字符

  • 如果你按下 r 后,接着输入一个字符,它会将选中的字符替换为你输入的字符。

但是,如果你要替换为整个单词(比如 test),你需要做的步骤是:

3. 替换为单词

  • c(改变命令):这会删除选中的内容,并进入插入模式。
  • 然后 输入 test,输入完后按 Esc 退出插入模式。

这样,选中的单词或区域就会被 test 替换掉。

另外一种方法

如果你不想删除整个选区,只是替换单个字符的情况,也可以使用 r 来替换每个字符,但如果是替换成多个字符(比如 test),还是推荐使用 c 来进行替换。

多窗口和标签页操作

  • :split:sp:水平分割窗口。
  • :vsplit:vs:垂直分割窗口。
  • Ctrl + w, h/j/k/l:在分割的窗口之间切换。
  • :tabnew:打开一个新的标签页。
  • gt:切换到下一个标签页。
  • gT:切换到上一个标签页。

折叠相关快捷键

  • za切换当前折叠状态(折叠/展开)
  • zc折叠当前代码块
  • zo展开当前代码块
  • zC → 递归折叠当前代码块及其子折叠
  • zO → 递归展开当前代码块及其子折叠
  • zm增加折叠级别(更大范围的代码块可折叠)
  • zr减少折叠级别(更大范围的代码块可展开)
  • zM最大化折叠(所有可折叠的代码块全部折叠)
  • zR完全展开(所有折叠的代码块全部展开)

查看折叠信息

  • zf → 手动创建折叠(如 zf3j 表示折叠光标向下 3 行)
  • zd → 删除当前折叠
  • zE → 删除所有折叠

你可以通过 :set foldmethod= 来查看或设置折叠方式,常见的折叠方式有:

  • manual → 手动折叠
  • indent → 按缩进折叠
  • syntax → 按语法折叠
  • expr → 使用表达式折叠
  • marker → 通过 } 标记折叠

如果你在 nvim 中使用 LazyVim,它可能会有额外的折叠插件(如 nvim-ufo),可检查 :h fold 了解更多信息。

剪切与粘贴

  • yy:复制当前行。
  • dd:删除当前行(同时剪切)。
  • p:粘贴内容到光标后。
  • P:粘贴内容到光标前。
  • 5p:粘贴 5 次。

其他常用命令

  • :w:保存当前文件。
  • :wq:保存并退出。
  • :q:退出当前文件。
  • :q!:强制退出当前文件(不保存)。
  • :e [file]:打开指定的文件。
  • :b [buffer]:切换到指定的缓冲区。
  • :ls:列出所有缓冲区。

进阶命令

  • .:重复上一个命令(比如删除、插入等)。
  • Ctrl + r:在插入模式下执行查找并替换。
  • gq:格式化当前行或选中的文本。
  • :set nu:显示行号。
  • :set nonu:隐藏行号。
  • :set wrap:自动换行。
  • :set nowrap:禁用自动换行。

copilot 插件命令

快捷键 功能描述
Ctrl + l 接受 Copilot 提示
Alt + [ 上一个 Copilot 提示
Alt + ] 下一个 Copilot 提示
Alt + \ 手动触发提示
Alt + Enter 打开 Copilot 面板(旧版)

你也可以自定义快捷键, 用 which-keys 查看 (一般在 keymaps.lua 中定义)

LSP 中常用命令

快捷键 功能
gd 跳转到定义
gD 跳转到类型定义
gi 跳转到实现
gr 查找引用(常配合 Telescope)
K 显示文档(hover info)
<leader>rn 重命名符号
<leader>ca 代码操作(Code Action)
[d / ]d 上/下一个诊断问题
<leader>cd 打开诊断列表(浮窗)
gl 当前行诊断信息

vscode 折叠代码快捷键

vscode-keymaps

vscode 的聚焦窗口好像只有 K(即shift + k), 然后就可以用 h,j,k,l 来移动 (下载了 nvim 这些插件才行)

然而有些窗口就无法聚焦的,nvim 中的窗口是设定为不可聚焦的

括号快速跳转这些

✅ 方法一:使用 % 快速跳转匹配括号

适用场景

  • 当前光标在 {} 上时

  • 函数体是被大括号包裹的

操作

  • 把光标移到 } 上,然后按下:%

  • 它会跳转到与之匹配的 {(即函数的开始)


✅ 方法二:使用 treesitter 的文本对象 af / if 跳转函数范围

如果你安装并启用了 nvim-treesitter(LazyVim 默认启用),可以:

操作

  • [ + m :跳到上一个函数开始

  • ] + m :跳到下一个函数开始

  • [ + M :跳到上一个函数结尾

  • ] + M :跳到下一个函数结尾

这些是 treesitter 的内建移动快捷键(可以检查 :help nvim-treesitter-textobjects


✅ 方法三:使用 LSP 的 go to definition(跳到函数定义)

如果你在某个函数调用处,想跳到函数声明处,可以用:

gd

跳到函数定义(如果是光标在调用上)

或者:

gD

跳到声明(声明 ≠ 定义,某些语言区分)

但这通常用于函数调用处 → 跳到定义,而你说的是函数末尾 → 函数头部,此时 % 和 treesitter 更合适。


✅ 方法四:用缩进折叠、函数范围快速移动

你可以用:

[{        跳到当前作用域(block)的开始
]}        跳到当前作用域(block)的结束

[{ 跳转到上一级块(如函数)的开头,非常适合从 } 跳回 {


✨ Bonus:推荐常用跳转键表

快捷键 含义 来源
% 括号配对跳转 原生
[{ 当前作用域开头(如函数) 原生
[m 上一个函数开始(treesitter) treesitter textobj
]m 下一个函数开始(treesitter) treesitter textobj
[{, ]} 进入/退出当前块作用域 原生

总结

  • 熟练掌握 d(删除)、y(复制)、p(粘贴)等基本操作会大大提高工作效率。
  • 使用 ciwcwC 等命令快速修改单词或行,避免手动删除和插入。
  • 善用 ggGwb 等命令快速定位,减少鼠标操作。
  • 通过多窗口和标签页功能(:split:vsplit)提高多任务处理能力。
  • uCtrl + r 是日常编辑中非常有用的撤销/重做工具。

随着时间的推移,使用这些快捷键会让你更加得心应手,从而提高工作效率。你可以根据自己的需求进一步定制和优化 Vim 配置。如果你有其他 Vim 使用上的问题,欢迎继续提问!