news 2026/11/2 1:56:52

Vim 学习速成:理解快捷键

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vim 学习速成:理解快捷键

Vim 学习速成

一、Vim 的优势

Vim 通过全键盘快捷键完成操作,长期使用效率高于依赖鼠标的编辑器(VS Code、Sublime Text 等)。类比竞技游戏:高阶操作绑定快捷键,规避鼠标移动带来的延迟;Vim 不需要做到全部快捷键最优,掌握前 20% 的常用功能,即可相比鼠标编辑器获得 80% 的效率提升。

学习误区:仅运行vimtutor练习一周后放弃,回归图形编辑器。
正确路径:在日常、非常规工作流中持续使用 Vim,而非只在固定场景使用。

同任务对比演示:修改 JSON 格式化 C 程序

任务目标:为缩进函数增加可配置缩进宽度参数,从固定 2 空格改为可传入数值。

  1. Vim 流程
    • 搜索定位函数声明static void indent,在形参列表添加int width
    • 修改printf格式化字符串,使用%*s,由后续传入的width参数控制填充长度
    • 同步修改print_json函数签名,增加width参数
    • 修改main:启用命令行参数解析,width采用三元表达式,有入参则转换为整数,无入参默认值 2
    • 编译报错后,借助 quickfix 错误列表遍历报错位置,使用.重复上一次修改操作批量补全参数
    • 重新编译,验证传入不同宽度参数的输出效果
    • 全程手不离开主键位区,无需鼠标点击、窗口切换
  2. VS Code 流程
    • 查找、修改代码时需要多次鼠标点击、光标拖拽、窗口切换
    • 跳转编译错误需要Ctrl+点击
    • 默认界面包含侧边文件树、状态栏、标题栏等冗余元素,可视代码区域更小
    • 手需要反复离开主键位区操作鼠标,单次修改可完成,但长期高频编辑损耗更高

二、Vim 的模式

Vim 以模式为运行框架,本部分覆盖普通模式(Normal)、插入模式(Insert)

  • 普通模式:默认模式,用于光标移动、文本操作、命令执行
  • 插入模式:用于输入文本

不深入模式底层定义,优先掌握实操。

三、光标移动

3.1 水平移动

按键作用
h光标左移一格
l光标右移一格
w向前跳至下一个单词开头
b向后跳至上一个单词开头
e向前跳至当前单词末尾
[数字]w/[数字]b一次性跳转指定数量单词
f{char}本行向后查找字符char,光标落在目标字符上
F{char}本行向前查找字符char,光标落在目标字符上
;重复上一次f/F查找(同方向)
,重复上一次f/F查找(反方向)
0跳至本行首字符
$跳至本行末尾
^跳至本行第一个非空白字符

3.2 垂直移动

按键作用
j下移一行
k上移一行
[数字]j/[数字]k一次性上下跳转指定行数;配合相对行号使用体验更佳
Ctrl+d向下翻半页
Ctrl+u向上翻半页
}跳到下一个段落(以空行分隔文本块)
{跳到上一个段落
gg跳转到文件首行
G跳转到文件末行
%跳转到匹配的成对符号:()[]{}
/pattern向下搜索文本pattern,回车确认
n跳到下一个搜索匹配项
N跳到上一个搜索匹配项
[数字]n/[数字]N一次性跳转多个匹配结果
Ctrl+c退出搜索

尽量不使用方向键,避免手离开主键位区。

四、Vim 操作语法:动词 + 数量 + 名词(动作语法)

结构:动词 [数量] 动作对象

  • 动词:定义操作
    • d:删除(delete)
    • c:修改(change,删除目标内容并进入插入模式)
    • y:复制(yank)
  • 名词:文本范围/移动动作
  • .:重复上一次修改操作

示例

  • dw:删除当前单词
  • cw:修改当前单词
  • yw:复制当前单词
  • d3w:删除后面 3 个单词
  • c3w:修改后面 3 个单词
  • df{char}:删除到目标字符(包含该字符)
  • dt{char}:删除到目标字符(不包含该字符)

文本选择范围(inner / around,i/a)

  • i(inner):内部,不含包裹符号
  • a(around):包含包裹符号以及周边空白
快捷键效果
diw删除单词内部
daw删除整个单词(含后方空格)
di(删除括号内部内容
da(删除括号+括号内全部内容
di{/da{花括号块
di"/da"双引号内文本
di'/da'单引号内文本
dip删除段落内部
dap删除整个段落
dit删除 HTML 标签内部内容
dat删除 HTML 标签 + 内部全部内容

粘贴

  • p:粘贴到光标之后
  • P:粘贴到光标之前
    复制内容存入寄存器,可多次粘贴复用。

行操作

  • V:行可视模式,选中整行
  • Vyp:复制当前行,在下方粘贴,快速复制一行

五、缓冲区、文件浏览、跳转

  1. Netrw(Vim 内置文件浏览器)
    • :e .打开目录浏览
    • 普通模式移动快捷键同样生效,回车进入文件/文件夹
  2. 缓冲区(buffer)
    • :ls列出所有打开缓冲区
    • :bn下一个缓冲区
    • :bp上一个缓冲区
  3. 跳转历史
    • Ctrl+o:回到上一个跳转位置
    • Ctrl+i:前进到下一个跳转位置>

    依靠缓冲区与跳转历史,可替代文件树、标签页

LSP 配套快捷键

  • gd:跳转到标识符定义处
  • K:悬浮查看文档/类型信息
    Telescope(插件):Space ff全局搜索文件

六、适用场景

Vim 不限于代码编辑:

  • 编辑各类配置文件(Wayland 合成器、DWM、locale 配置等)
  • Linux TTY 无图形界面环境,无鼠标可用
  • 日常纯文本、Markdown 文件查看修改

七、学习路线总结

  1. 抛弃方向键,全程使用hjkl移动光标
  2. 依次掌握移动、基础删除/修改、复制粘贴、.重复操作
  3. 在真实工作流持续使用,而非单独刷教程
  4. 进阶内容(本教程未覆盖,后续进阶内容):查找替换、高级宏、插件配置等
  5. 目标:形成肌肉记忆,手保持在主键位区,减少鼠标切换开销

Vim 映射命令分类表

命令模式范围是否递归说明
mapNormal、Visual、Select、Operator-pending是多模式递归映射,范围较广,容易在意外模式下触发
noremapNormal、Visual、Select、Operator-pending否上述多模式的非递归版本
nmapNormal是普通模式递归映射
nnoremapNormal否普通模式非递归映射;自定义快捷键通常优先使用
vmapVisual、Select是可视/选择模式递归映射
vnoremapVisual、Select否可视/选择模式非递归映射
imapInsert是插入模式递归映射
inoremapInsert否插入模式非递归映射
cmapCommand-line是命令行模式递归映射
cnoremapCommand-line否命令行模式非递归映射
omapOperator-pending是操作符等待模式递归映射,如输入d、y、c后等待运动对象的阶段
map!Insert、Command-line是插入模式与命令行模式的递归映射
noremap!Insert、Command-line否插入模式与命令行模式的非递归映射

术语解释

  • <leader>:Vim 中的用户自定义前缀键,用于构造个人快捷键前缀。默认通常为\,常见配置为let mapleader = ","。例如nnoremap <leader>w :w<CR>表示在普通模式下按下,w执行保存。
  • 寄存器"+:系统剪贴板寄存器,对应操作系统的 CLIPBOARD。"+y将选中文本复制到系统剪贴板,"+p从系统剪贴板粘贴。该功能要求 Vim 编译时启用+clipboard。
  • <M-...>:Alt / Meta 组合键。例如<M-F2>表示 Alt+F2。
  • <C-...>:Control 组合键。例如<C-c>表示 Ctrl+C。
  • <CR>:回车键,等价于 Enter / Return。在映射中常用于提交 Ex 命令,如:w<CR>表示执行保存并确认。

使用建议

  • 自定义快捷键优先使用非递归形式:nnoremap、vnoremap、inoremap、cnoremap。
  • 避免使用map绑定普通快捷键,因其会在 Operator-pending 等模式下意外生效。
  • 需要与系统剪贴板交互时,使用"+y、"+p,并确认 Vim 支持+clipboard。

vimrc 配置片段


" ============================================================================= " 基础设置 " ============================================================================= set nocompatible " 关闭 vi 兼容模式 set encoding=utf-8 " 文件编码 set fileencodings=utf-8,gbk,latin1 set number " 显示行号 set relativenumber " 显示相对行号 set cursorline " 高亮当前行 set showmode " 底部显示当前模式 set showcmd " 显示未完成的命令 set hidden " 允许隐藏未保存的缓冲区 set history=1000 " 命令历史记录数 " ============================================================================= " 缩进与空白 " ============================================================================= set tabstop=4 " Tab 显示宽度 set shiftwidth=4 " 自动缩进宽度 set softtabstop=4 " 编辑时 Tab 退格宽度 set expandtab " Tab 转换为空格 set smartindent " 智能缩进 set autoindent " 保持上一行缩进 " ============================================================================= " 搜索设置 " ============================================================================= set hlsearch " 高亮搜索结果 set incsearch " 增量搜索 set ignorecase " 搜索忽略大小写 set smartcase " 含大写字母时区分大小写 " ============================================================================= " 界面与分割 " ============================================================================= set splitbelow " 水平分割窗口在下方 set splitright " 垂直分割窗口在右侧 set scrolloff=8

Reference

  • 29 分钟 Vim 速成:无需记忆,理解快捷键丨2026 年底,你还在用 Vim 吗?_哔哩哔哩_bilibili
    https://www.bilibili.com/video/BV18JxF6SEw2/
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 1:56:20

00 专栏导读:MES选型先看业务范式,而不是看功能清单

专栏:制造业各行业MES业务流程、底层逻辑与系统适配性 读者:MES实施顾问、CIM/EAP工程师、工艺工程师、生产负责人 属性:B线技术深度稿。主站先发,CSDN T+24h 同步。 一、开篇:选型失败,多半不是功能不够 先说一个很常见的场面。 一家做注塑的厂要上 MES,选型会上摆了…

作者头像 李华
网站建设 2026/11/2 1:56:01

【Python】主进程_子进程

可以通过代码查看任务管理器查看&#xff1a;在windows系统中&#xff0c;查看&#xff1a;进程名&#xff0c;父进程pid&#xff0c;进程pid的命令如下 wmic process get Name,ParentProcessId,ProcessId

作者头像 李华
网站建设 2026/11/2 1:54:58

Transformer架构:从原理、架构到大模型落地

2017年&#xff0c;Google 在论文《Attention Is All You Need》中提出的 Transformer 架构&#xff0c;彻底颠覆了深度学习序列建模的技术体系。在此之前&#xff0c;NLP、语音、时序预测等任务长期依赖 RNN、LSTM、GRU 等循环结构&#xff0c;受限于串行计算逻辑&#xff0c;…

作者头像 李华
网站建设 2026/11/2 1:54:55

销售线索拨打时机对接通率影响的几个实用技巧总结

销售线索拿到手之后&#xff0c;拨打的时间节点对接通率有明显影响&#xff0c;下面做个方法总结。当天打和隔天打&#xff0c;接通率真的有差别吗&#xff1f;差别主要看线索的来源。如果是客户主动留资、官网咨询或者刚报名参加过活动&#xff0c;这类线索对来电是有预期的&a…

作者头像 李华