🐧 Vim 核心操作笔记与速查手册 (Linux 开发者版)
目录
- 模块一:Vim 基础与模式认知
- Vim 的核心哲学
- 四大基本模式
- 模块二:高频代码阅读与导航 (⭐ 最高频)
- 基础移动与文件/屏幕跳转
- 代码搜索与匹配跳转
- 函数定义跳转与回退 (Tags)
- 精准移动:行内与单词跳转
- 模块三:高效代码编辑与重构 (⭐ 核心生产力)
- 基础增删改查与剪切板
- 可视模式 (Visual)
- 文本对象 (Text Object) - 进阶必学
- 批量替换命令 (😒)
- 模块四:多文件与工作区管理 (⭐ 多文件开发必备)
- Buffer、Window、Tab 的核心区别
- Window 分屏操作 (最常用)
- Buffer 后台管理
- Tab 标签页操作
- 模块五:进阶机制
- 寄存器 (Register)
- 模块六:附录
- 常见易错点纠正
- 一页速查表
模块一:Vim 基础与模式认知
1. Vim 的核心哲学
Vim 是一个以键盘操作为核心的文本编辑器。它和普通编辑器最大的区别:
- 强调模式切换。
- 强调移动 + 操作的语法组合。
- 大部分操作是“直接命令式编辑”,而不是“先用鼠标选中再点击”。
例如:
dw(DeleteWord 删除单词)、ci"(ChangeInner"修改引号内容)。
2. 四大基本模式
- Normal (普通模式):默认模式。用于移动光标、删除、复制、搜索。(按
Esc进入)。 - Insert (插入模式):用于输入代码。
i(Insert):在光标前插入。a(Append):在光标后追加。o(Open):在当前行下方打开(新建)一行。O(大写Open):在当前行上方打开(新建)一行。I(大写Insert):在当前行首(第一个非空字符)插入。A(大写Append):在当前行尾追加。
- Visual (可视模式):用于选择代码块。
v(Visual):字符级可视选择。V(大写Visual):行级可视选择。Ctrl + v:块/列可视选择(常用于批量加注释)。
- Command-line (命令行模式):按
:进入。- 常用于
:w(Write 保存)、:q(Quit 退出)、:%s/a/b/g(替换)。
- 常用于
模块二:高频代码阅读与导航 (⭐ 最高频)
💡Linux 开发中,看代码的时间远大于写代码,熟练掌握跳转是第一生产力。
3. 基础移动与文件/屏幕跳转
方向与翻页:
h,j,k,l:左、下、上、右。(历史遗留,为让手指不离开主键盘区)Ctrl + d(Down):向下翻半页 (阅读代码最舒服的方式)。Ctrl + u(Up):向上翻半页。Ctrl + f(Forward):向下翻一整页。Ctrl + b(Backward):向上翻一整页。
行与文件跳转:
0:跳到绝对行首 (第1列)。^:跳到行首第一个非空字符。$:跳到行尾。gg(Go):跳到文件开头。G(大写Go):跳到文件结尾 /10G跳到第10行。
跳转历史回溯 (极度重要):
Ctrl + o(Older):跳回上一个旧位置 (后退)。Ctrl + i(Inewer/Forward):前进到下一个新位置 (前进)。
4. 代码搜索与匹配跳转
/pattern:向后搜索。?pattern:向前搜索。n(Next):跳到下一个匹配项。N(大写Next):跳到上一个匹配项 (反向)。*:向后搜索当前光标下的单词 (⭐查找变量引用神器)。#:向前搜索当前光标下的单词。
5. 函数定义跳转与回退 (Tags)
阅读 C/C++ 或 Linux 源码时的刚需功能。
单文件内快速跳转:
gd(Go toDefinition):跳转到光标下单词在当前函数/局部的定义。gD(Go to globalDefinition):跳转到光标下单词在当前文件/全局的定义。
跨文件跳转 (需配合 ctags 工具):
Ctrl + ]:跳入光标下函数/变量的定义处。Ctrl + t(Tag pop):按标签历史原路跳出(支持多层嵌套返回)。g]:如果项目中有多个同名函数,列出所有匹配项供输入数字选择。
6. 精准移动:行内与单词跳转
按单词跳:
w(Word):跳到下一个单词首字母 (以标点为界,粒度细)。b(Backward):后退到上一个单词首字母。e(End):跳到当前或下一个单词的尾部。W/B/E(大写):按WORD跳 (以空格为界,跨过标点,粒度粗)。
行内找字符:
f{char}(Find):向右找到本行下一个{char}(如f(跳到左括号)。t{char}(Till):向右走到本行下一个{char}的前挨着的一个字符(直到…)。;:正向重复上一次的f或t。,:反向重复上一次的f或t。
模块三:高效代码编辑与重构 (⭐ 核心生产力)
7. 基础增删改查与剪切板
- 删除 (Delete):
x(cross out):删除光标下的字符。d(Delete):配合范围使用。dd(删整行)、D(删至行尾)。
注:Vim 的删除会自动存入寄存器,相当于“剪切”。
- 复制 (Yank,意为拔出、扯下):
y(Yank):配合范围使用。yy(复制当前行)。
- 粘贴 (Put,放置):
p(Put):在光标后/下一行粘贴。P(大写Put):在光标前/上一行粘贴。
- 修改 (Change = 删除 + 进入插入模式):
c(Change):配合范围。cw(改单词)、cc(改整行)、C(改至行尾)。
- 替换 (Replace / Substitute):
r{char}(Replace):只替换光标下当前单个字符,不进入插入模式。s(Substitute):删除当前字符并立即进入插入模式。
8. 可视模式 (Visual)
- 进入方式:
v(按字符)、V(按行)、Ctrl + v(按块/列)。 - 常用操作:
- 先选区 ->
d(删除)、y(复制)。 - 先选区 ->
>或<(代码批量缩进)。
- 先选区 ->
9. 文本对象 (Text Object)
💡Vim 语法的精髓。公式:
操作(d/c/y) + 范围(i/a) + 对象(w/”/()/{})
- 范围助记:
i(Inner):内部(不带边界空格或括号本身)。a(Around/All):周围/全部(包含边界空格或括号本身)。
- 常用组合:
diw(DeleteInnerWord):删除当前单词。ci"(ChangeInner"):修改双引号内部内容。ci{/ci(:修改函数体{}或参数列表()内的代码。ya{(YankAround{):复制整个函数块 (包含大括号本身)。
10. 批量替换命令 (😒)
:s/old/new/(Substitute):替换当前行第一个。:s/old/new/g(Global):替换当前行所有匹配项。:%s/old/new/g(%代表全文):替换全文所有 (重构变量名常用)。:%s/old/new/gc(Confirm):替换全文,且每次替换前弹窗确认 (更安全)。
模块四:多文件与工作区管理 (⭐ 多文件开发必备)
11. Buffer、Window、Tab 的核心区别
- Buffer (缓冲区):加载到内存中的文件内容 (核心数据)。
- Window (窗口):显示 Buffer 的可视化区域。
- Tab (标签页):Window 的布局集合。
12. Window 分屏操作 (最常用)
💡Linux 终端下看 .h 头文件和 .c 源文件对比必备。所有的分屏操作都以
Ctrl + w(Window) 打头。
Ctrl + w v(Vertical):垂直分屏(左右布局,等价命令:vs= Vertical Split)。Ctrl + w s(Split):水平分屏(上下布局,等价命令:sp= Split)。Ctrl + w w(Window):在分屏窗口间循环切换。Ctrl + w h/j/k/l:按照方向键切换窗口。Ctrl + w =:让所有窗口大小平均。
13. Buffer 后台管理
:ls(List):列出当前后台打开的所有文件。:bn(BufferNext):切换到下一个 Buffer。:bp(BufferPrevious):切换到上一个 Buffer。:b {部分文件名}:模糊匹配切换 Buffer。
14. Tab 标签页操作
:tabe {filename}(TabEdit):在新标签页打开文件。gt(GoTab):向右切换到下一个标签页。gT:向左切换到上一个标签页。:tabclose:关闭当前标签页。
模块五:进阶机制
15. 寄存器 (Register)
Vim 的复制/粘贴依赖寄存器,默认使用无名寄存器"。
- Vim 有 26 个有名寄存器:
"a到"z。 - 指定寄存器复制:
"ayiw(把当前单词复制到 a 寄存器)。 - 指定寄存器粘贴:
"ap(把 a 寄存器的内容粘贴出来)。 - 查看寄存器:
:reg(Registers 查看所有),:reg a(查看 a)。
模块六:附录
16. 常见易错点纠正
0和^:0是绝对的第1列;^是代码起点的非空格字符。$和g_:$是绝对行尾 (可能包含空格);g_是最后一个有效代码字符。w和W:foo-bar用w(word) 算 3 个词,用W(WORD) 算 1 个整体。c的本质:c(Change) 不是单纯的删除,它是Delete + Insert,用来“改”东西。%s/a/b/g的g:%代表全文范围,结尾的g代表“一行内如果有多个匹配,全部替换(Global in line)”。
17. 一页速查表 (含助记词)
| 场景 | 快捷键命令 | 助记 |
|---|---|---|
| 高频跳转 | Ctrl+o,Ctrl+i | Older 后退 /Inewer 前进 |
| 翻页移动 | Ctrl+d,Ctrl+u | Down 向下 /Up 向上 |
| 代码搜寻 | *,/,n,N | n=Next 下一个 |
| 函数定义 | Ctrl+],Ctrl+t | t=Tag pop 跳出标签 |
| 精准移动 | w,b,f,t | Word 词 /Back 退 /Find 找 /Till 直到 |
| 神级修改 | ci",ci{,diw | ChangeInner /DeleteInner |
| 快速编辑 | cw,yy,p | ChangeWord /Yank 复制 /Put 粘贴 |
| 分屏比对 | :vs,:sp | VerticalSplit 竖分 /Split 横分 |
| 批量替换 | :%s/a/b/g | Substitute 替换 /Global 行内全局 |
| 可视选区 | v,V,Ctrl+v | Visual 可视化模式 |