摘要
本篇《Linux Vim 入门指南》从零开始,系统而全面地介绍了 Vim 的操作理念、基础模式、光标移动、文本编辑、搜索替换、可视化模式、多窗口与多文件协作等核心能力,并深入讲解 Vim 配置、插件体系与高效编辑技巧。文章不仅涵盖新手最容易踩的坑,还通过实战示例带你完成一次完整的编辑任务,使读者不但 "会用 Vim",更真正理解 Vim 背后的高效思维方式。无论你是 Linux 新手,还是想进一步提升编辑效率的开发者,这篇指南都将成为你学习 Vim 的最佳起点。
1、引言:为什么学 Vim?
当你第一次接触 Linux 时,Vim 几乎是无法绕开的存在。无论你是刚接触服务器的新手、学习 Linux 的大学生,还是希望进阶为后端工程师或运维工程师,Vim 迟早会成为你必须掌握的工具之一。许多初学者在第一次打开 Vim 时,都会被它的 "反直觉" 吓到:不能用鼠标、按键奇怪、甚至连退出都困难。但随着理解加深,你会发现 Vim 并不是为了 "折磨新手" 而存在,它是一种为了极致效率而设计的编辑方式。
1.1、Vim 是什么?为什么如此重要?
Vim 的全称是 "Vi IMproved",它是 UNIX 系列系统中传统编辑器 vi 的增强版本。Vim 诞生于 1991 年,到今天仍然活跃在无数开发者与服务器管理员的日常工作中。它轻量、快速、几乎在所有 Linux 发行版中预装,并且可以在没有图形界面的环境下工作------这正是它成为服务器管理核心工具的原因。
你可能会在这样的场景中遇到 Vim:
- 远程 SSH 到服务器,修改 Nginx、MySQL 配置
- 在 Docker 容器内调试某个临时文件
- 编写 C/C++ 程序或脚本
- 修改系统启动项、网络配置、环境变量
- 在纯命令行环境中进行快速文本处理
在这些场景中,图形化编辑器不存在,也无法安装 。
而 Vim,不管是 20 年前还是今天,都会安静地躺在那里、随时可用。
1.2、Vim 的核心优势:它为什么被认为很 "硬核"?
我们常常听到老程序员说:"Vim 是你最后需要学的编辑器。"
原因在于,Vim 有其他编辑器无法替代的一些特性:
1.2.1、极高的编辑效率
Vim 是模式化编辑器 。
它将 "移动光标" 和 "输入文字" 分离,让你不需要使用鼠标、方向键,就能以极快速度完成编辑。
例如:
- 删除一个单词:
dw - 删除一行:
dd - 复制 3 行:
3yy - 跳到文件末尾:
G - 搜索某个词:
/keyword
当你习惯这些操作后,你会发现
你的手几乎不用离开主键盘区,效率反而比鼠标更高。
1.2.2、随时可用:没有 Vim 的 Linux 是不完整的
几乎所有 Linux 系统、类 UNIX 系统、服务器、容器,都内置 Vim 或 Vi。
这意味着:
- 不需要安装
- 不依赖图形界面
- 不会因为环境限制无法使用
当你进入一台陌生的云服务器、跳板机、生产环境,
你能百分之百确定:Vim 会在那里。
1.2.3、Vim 功能强大,扩展性极高
Vim 本身是轻量的,但它的插件体系堪称 "外挂级":
- 文件树浏览(NERDTree)
- 自动补全(coc.nvim)
- 颜色主题
- Git 集成
- LSP(语言服务器协议)
- 代码格式化
- Markdown 预览
你甚至可以把 Vim 打造成一个类似 VSCode 的全功能 IDE。
1.2.4、Vim 是程序员与运维人员的通用语言
你是否见过这些场景:
- LaTeX 教师用 Vim 讲课
- 老程序员在终端飞快地敲字
- 运维工程师用 Vim 编辑数百个配置文件
- C++ 工程师使用 Vim 写算法题
- 黑客工具与渗透环境几乎标配 Vim
这不是巧合。
Vim 已经成为技术人的一种共通技能,就像会使用 Git 和 Linux 一样重要。
1.3、新手为什么应该从 Vim 开始?
初学者常常觉得 "VSCode 很好用,为啥还学 Vim?"
但当你真正深入 Linux,就会发现:
- VSCode 无法在服务器终端中运行
- 容器内不会有 GUI
- 某些系统只能 SSH 进入
- 故障抢修时只能靠终端
- 最关键的是:你不可能永远离开命令行环境
学习 Vim,不仅是学习一个编辑器,
更是学习 Linux 开发者的工作方式。
1.4、学 Vim 很难吗?
事实上,Vim 的学习曲线是 "前陡后平"。
- 第一天:不知道怎么退出
- 第一周:可以正常编辑文本
- 一个月:开始意识到效率真的很高
- 三个月:开始自定义配置
- 半年后:你会发现所有可视化编辑器都变"慢"了
Vim 的难点在于 "模式编辑" 的概念需要习惯。
但一旦你跨过这个门槛,你的编辑思维方式会被完全改变。
1.5、这篇 Vim 入门指南能带给你什么?
本博客旨在让完全新手也能:
- 理解 Vim 的模式与操作逻辑
- 学会所有基础操作
- 熟练移动、编辑与搜索
- 掌握分屏、多文件、可视模式等强力功能
- 配置自己的
.vimrc - 掌握插件管理器与常用插件
- 知道如何在实际工作中使用 Vim
- 最终能够顺畅地在 Linux 环境中完成一切文本编辑任务
你不需要任何 Vim 基础,也不需要背命令。
我们会逐步从 "最小可用" 带你走向 "流畅使用",再到 "高效精通"。
2、Vim 的基础概念与操作模式
Vim 是一个 "模式化编辑器",这使得它与所有常见图形编辑器(如 VSCode、Notepad++、Sublime Text)有本质差异。大多数编辑器都是 "所见即所得" 的输入模式,而 Vim 的核心理念是:
将编辑动作与文字输入分离,从而使编辑效率最大化。
为了掌握 Vim,你必须彻底理解下面三个关键点:
2.1、Vim 的三大核心模式
Vim 之所以看似 "反直觉",就是因为它包含多个不同的操作模式。
最核心的三种模式是:
- 普通模式(Normal Mode)
- 插入模式(Insert Mode)
- 命令模式(Command Mode)
还有两个常用模式:
- 可视模式(Visual Mode)
- 替换模式(Replace Mode)
下面逐个讲清它们的用途、特性、切换方式。
2.1.1、普通模式(Normal Mode)------Vim 的默认模式
打开 Vim 的瞬间你就处于 Normal 模式,
这个模式不能直接输入字符,而是用于:
- 移动光标
- 删除内容
- 复制、粘贴
- 搜索
- 调整文本结构
- 执行命令
普通模式的理念是:
编辑行为应该快速且无需离开键盘主区域。
例如:
| 操作 | 按键 |
|---|---|
| 左移 | h |
| 下移 | j |
| 上移 | k |
| 右移 | l |
| 删除当前字符 | x |
| 删除整行 | dd |
| 复制整行 | yy |
| 粘贴 | p |
为什么要用 h/j/k/l?
因为手不需要离开主键区,提高效率。
2.1.2、插入模式(Insert Mode)------像普通编辑器一样输入文字
只有在 Insert 模式下,你才能像平常一样打字。
进入方式:
i:在当前光标前插入a:在光标后插入o:在下一行插入新行I:跳到行首插入A:跳到行尾插入
退出 Insert 模式:
Esc
Insert 模式简单易懂,但它不是 Vim 的高效核心。
2.1.3、命令模式(Command Mode)------执行高级命令
按下 : 可以进入命令模式。
你会发现命令行出现在下方,此时可以输入:
- 保存:
:w - 退出:
:q - 保存退出:
:wq - 强制退出:
:q! - 查找替换:
:%s/old/new/g - 打开文件:
:e filename - 显示行号:
:set number - 分屏:
:split、:vsplit
命令模式是 Vim 最强大的部分,几乎所有高级功能都通过它实现。
2.1.4、可视模式(Visual Mode)------选择文本范围
按下以下键进入可视模式:
v:字符选择模式V:行选择模式Ctrl + v:块选择模式(列编辑)
可视模式适用于:
- 批量删除
- 批量缩进
- 批量格式化
- 列编辑(非常强大)
例如:
选择多行 → >(右缩进),<(左缩进)
2.1.5、替换模式(Replace Mode)------覆盖文字
进入替换模式:
R
当你希望覆盖文本而不是插入时,它非常有用。
2.2、模式切换总结表
| 模式 | 进入方式 | 退出方式 | 用途 |
|---|---|---|---|
| 普通模式 | Vim 默认 | Esc | 移动、编辑、删除 |
| 插入模式 | i / a / o 等 | Esc | 输入文本 |
| 命令模式 | : | Esc | 保存、查找、替换等 |
| 可视模式 | v / V / Ctrl+v | Esc | 选择和批处理操作 |
| 替换模式 | R | Esc | 覆盖文本 |
2.3、Vim 的核心设计哲学:组合键是力量的来源
Vim 不使用多键快捷键(如 Ctrl + C),而是利用 动作(operator) + 范围(motion) 组合来生成各种功能。
例如:
d + w → 删除一个单词
d + $ → 删除到行尾
y + 2w → 复制两个单词
c + i + " → 修改引号内文本
动作指令(operator):
d删除y复制c修改(删除+进入插入模式)v选择
移动(motion):
w单词$行尾0行首}下一段)下一句
可以任意组合。
这就是 Vim 能做到 "极致高效" 的原因。
2.4、数字前缀:批量操作的神器
Vim 提供数字前缀:
3dd → 删除 3 行
10j → 光标向下 10 行
5yy → 复制 5 行
2w → 向前跳 2 个单词
数字 + 动作 / 移动,是 Vim 的基础逻辑。
2.5、状态栏提示 ------ Vim 不会让你迷路
在 Vim 底部状态栏,通常会提示当前状态,例如:
-- INSERT --
-- VISUAL --
-- REPLACE --
如果你不知道自己在哪个模式,
按 Esc 几次
你就能回到 Normal 模式。
2.6、为什么 Vim 的模式化设计如此重要?
因为它让你:
- 不必使用鼠标
- 不必离开键盘主区
- 不用在多按键组合中绕来绕去
- 所有操作都能联动组合
- 每个编辑动作都可以扩展成"高效率动作"
例如删除一个单词:
VSCode 需要选中 → 按删除
Vim:
dw
删除括号内内容:
di)
修改函数体:
ci{
越学你就越会爱上这种精准而快速的编辑方式。
2.7、本章小结
在这一章中,你学习了 Vim 的核心本质:
- Vim 是模式化编辑器
- 学习 Vim 的关键不是记快捷键,而是理解操作模式
- Vim 的强大来自动作 + 移动 的组合
- 理解模式切换是迈入 Vim 世界的第一步
- 所有效率的来源是:双手不离键盘主区
在接下来的章节中,我们会正式进入最关键的部分:
光标移动、文本编辑、搜索、替换、分屏、文件管理等真正的 Vim 技能。
3、基础启动方式与文件操作
作为一个编辑器,Vim 最常用的能力就是------启动它、打开文件、编辑内容、保存退出。这些操作虽然看似基础,却是新手最容易混淆的地方,也是学好 Vim 的第一步。本章将系统地介绍 Vim 的启动方式、文件打开方式、保存退出逻辑,以及常见的文件操作方法。
3.1、启动 Vim 的多种方式
Vim 的启动方式非常灵活,可以根据你的工作场景选择不同模式。
3.1.1、直接启动 Vim(不指定文件)
vim
效果:启动空白 Vim 界面,此时你可以通过 :e 文件名 打开文件。
3.1.2、启动并打开指定文件
vim file.txt
如果 file.txt 存在 → 直接打开
如果 file.txt 不存在 → 创建一个新文件(保存后生成)
3.1.3、同时打开多个文件
vim file1.txt file2.txt file3.txt
不同文件会被加载到不同 buffer 中,你可以通过:
:bn→ 下一个文件(buffer next):bp→ 上一个文件(buffer previous):ls→ 查看当前打开的文件列表
3.1.4、以只读模式打开文件
适用于查看系统配置文件,例如 /etc/fstab:
vim -R /etc/fstab
此模式无法直接修改文件。
3.1.5、启动 Vim 并跳转到指定行号
vim +25 file.txt
打开并跳到第 25 行。
跳到文件末尾:
vim + file.txt
3.1.6、启动 Vim 并执行命令
vim +"set number" file.txt
这在复杂自动化环境中很常用。
3.2、文件保存、退出与常见误区
新手最容易卡住的就是 "怎么退出 Vim"。
Vim 没有像普通编辑器那样的 "关闭窗口 X",而是通过命令模式完成。
3.2.1、保存文件
:w
保存但不退出。
3.2.2、保存并退出
:wq
更常用的简写:
:x
3.2.3、强制退出(不保存)
:q!
如果你改乱了文件或只是想退出查看,这个非常有用。
3.2.4、保存到另一个文件(另存为)
:w newfile.txt
也可以复制文件:
:w ~/backup_config.txt
3.2.5、如果文件是只读的(需要 sudo)
常见场景:编辑 /etc/hosts
你会遇到错误:"E45: 'readonly' option is set"
正确方式:
sudo vim /etc/hosts
如果已经进了 Vim 才发现需要权限:
:w !sudo tee %
非常实用!
3.3、在 Vim 中打开、创建和切换文件
Vim 不需要退出编辑器就可以打开其他文件。
3.3.1、打开另一个文件
:e another.txt
如果文件不存在,会自动创建。
3.3.2、切换到上一次编辑的文件
:e #
适用于频繁来回编辑不同文件的场景。
3.3.3、打开当前目录下文件(智能补全)
输入:
:e <Tab>
会自动补全文件名,比手敲更快。
3.3.4、查看当前打开的文件列表(buffer)
:ls
显示所有 buffer 状态:
%当前文件#前一个文件a活动h已隐藏
3.3.5、切换 buffer
- 下一个 buffer:
:bn - 上一个 buffer:
:bp - 跳到指定 buffer:
:b 数字
例如:
:b 3
打开 buffer 3 的文件。
3.4、文件删除、重命名与外部命令结合
Vim 可以执行外部命令,非常强大。
3.4.1、删除文件
:!rm file.txt
在 Vim 中直接使用 Linux 命令。
3.4.2、重命名文件
:!mv old.txt new.txt
然后刷新:
:e %
3.4.3、查看当前文件路径
:echo expand('%:p')
可以显示绝对路径,非常实用。
3.4.4、新建一个空文件并编辑
vim newfile.txt
或者在 vim 内:
:e newfile.txt
3.5、使用 Vim 查看系统配置文件
很多 Linux 用户都依赖 Vim 编辑系统配置:
/etc/hosts/etc/fstab/etc/nginx/nginx.conf/etc/ssh/sshd_config
推荐快捷写法:
sudo vim /etc/nginx/nginx.conf
Vim 适用于查看带格式文件:
- JSON
- YAML
- XML
- C/C++
- Shell
- Python
- 日志文件
Vim 通过语法高亮和缩进规则让它们结构清晰。
3.6、小结
在本章中,你学习了:
- 各种 Vim 的启动方式
- 如何打开、创建、切换文件
- 保存、退出、另存为、强制退出等必备操作
- 如何在 Vim 中结合 Linux 命令
- 文件路径、Buffer、配置文件编辑的常见技巧
这些知识是 Vim 的 "生门",掌握它们后,你就真正能把 Vim 当作一个可靠的日常编辑器使用。
4、Vim 的光标移动详解(新手必须掌握)
Vim 的移动能力是它高效编辑的核心。如果你只会用方向键在文件里慢慢移动,那你还远远没有发挥出 Vim 的真正实力。本章将从基础到高级,全面讲解 Vim 的所有光标移动方式,帮助你以极高效率在文档中跳转。
4.1、基础光标移动:h / j / k / l
在普通编辑器中,我们用方向键移动光标。但 Vim 鼓励手不离开主键区,因此使用:
h:向左移动j:向下移动k:向上移动l:向右移动
可以配合数字使用:
5j # 向下移动 5 行
3h # 向左移动 3 个字符
使用技巧:
- 建议从一开始就减少使用方向键,甚至可以在配置中禁用方向键。
- h/j/k/l 可以实现字符级和行级的最基础移动。
4.2、行级快速移动
Vim 提供了大量 "在当前行快速跳转" 的命令。
4.2.1、行首与行尾
0:跳到行首(绝对行首)^:跳到本行第一个非空白字符$:跳到行尾
比如在编辑代码时,^ 是最常用的,因为会跳过缩进。
4.2.2、在行内跳到某字符
非常强大的跳转方式:
f<char>:向右跳到某字符F<char>:向左跳到某字符t<char>:向右跳到某字符之前T<char>:向左跳到某字符之后
例如:
fa # 跳到当前行下一个 a
t) # 跳到 ")" 前一个字符
用于代码行编辑非常高效。
配合 ; 和 , 可以重复跳转:
;:重复上一次 f/t/F/T,:反向重复
4.3、单词级跳转:w / e / b
单词移动是 Vim 的核心技能之一。
4.3.1、按单词跳
w:跳到下一个单词开头e:跳到当前/下一个单词结尾b:跳到当前/前一个单词开头
举例:
w # 看到下一个单词头
3w # 跳 3 个单词
4.3.2、按 "大单词" 跳(包含符号)
大写命令忽略符号拆分:
W:下一个大单词开头E:当前/下一个大单词结尾B:前一个大单词开头
区别:
hello_world-test
w 会按照 _ 和 - 作为边界
W 会把整个 "hello_world-test" 视为一个大单词
4.4、行间跳转:gg / G / nG
这些命令让你在文件任意位置间瞬移。
4.4.1、文件头尾跳转
gg:跳到文件第一行G:跳到文件最后一行
4.4.2、跳到指定行号
42G # 跳到第 42 行
:42 # 同效果
跳转日志文件、配置文件非常常见。
4.5、屏幕维度跳转:H / M / L
以当前屏幕显示区域为参照跳转:
H(High):跳到屏幕最上方一行M(Middle):跳到屏幕中间一行L(Low):跳到屏幕最下方一行
非常适合浏览长文件。
4.6、段落、句子跳转
Vim 可以按语义跳转:
按段落跳
{:跳到上一段开始}:跳到下一段开头
段落通常以空行分隔。
按句子跳
(:上一句):下一句
适用于查看 Markdown、文本类文章。
4.7、搜索跳转:/ 与 ?
搜索是 Vim 最强大的跳转方式之一。
4.7.1、向下搜索
/关键字
按 Enter 后:
n:下一个匹配N:上一个匹配
4.7.2、向上搜索
?关键字
功能同上。
4.7.3、搜索当前光标所在单词
*:向下搜索当前单词#:向上搜索当前单词
非常适合搜索变量名、函数名。
4.8、跳转历史(非常重要)
Vim 会记录你的跳转路径,这允许像浏览器"前进/后退"一样穿梭。
Ctrl-o:跳回上一个位置(后退)Ctrl-i:跳到下一个位置(前进)
适用于复杂编辑场景(如跳到多个文件再返回)。
4.9、标记(marks)跳转
标记是高级用户必学技能。
4.9.1、设置标记
ma # 在当前行设置标记 a
4.9.2、跳转到标记
'a:跳到标记 a 所在行a`:跳到标记 a 的精确位置(列也对齐)
非常适用于在文件两端来回编辑。
4.10、文档结构跳转(函数、括号、语法)
4.10.1、括号匹配跳转
在括号上按:
%
自动跳到配对的括号(适用于 {}, (), [])
4.10.2、快速跳到函数/代码块开头
在代码语言中:
[[:跳到上一个函数开始]]:跳到下一个函数开始
适用于 C、C++、Python、Java 等。
4.11、窗口级跳转(多个 split 时)
Vim 支持拆分窗口:
Ctrl-w h:左Ctrl-w l:右Ctrl-w j:下Ctrl-w k:上
文件对比、查日志时非常有用。
4.12、Tab 页跳转
gt # 下一 Tab
gT # 上一 Tab
4.13、组合移动:数字 + 移动命令
任何移动命令都可以加数字增强:
10j # 向下 10 行
5w # 向前 5 个单词
3e # 跳到 第 3 个单词结尾
2f, # 当前行第二个 ","
4.14、光标移动的实战技巧与建议
技巧 1:减少方向键,强制使用 hjkl
这是提升 Vim 水平的重要一步。
技巧 2:搜索结合跳转是最快方式
在大型文件中,最有效跳转方法永远是:
/关键字 + n
技巧 3:f/t 是行编辑神器
定位分号、括号、引号特别快。
技巧 4:gg/G 对日志文件非常重要
比如查看新的 nginx 日志:
G # 立刻跳到末尾
技巧 5:使用 Ctrl-o 和 Ctrl-i 管理跳转历史
可以像浏览器一样"后退/前进"。
4.15、小结
本章系统介绍了 Vim 的所有光标移动方式,包括:
- 字符级移动:h j k l
- 行内跳转:0 ^ $ f/t
- 单词跳转:w e b W E B
- 行间跳转:gg G nG
- 搜索跳转:/ ? * #
- 屏幕级跳转:H M L
- 结构跳转:() {} [] % [[ ]]
- 历史跳转:Ctrl-o / Ctrl-i
- 标记跳转:ma 'a
- 多文件、多窗口跳转
熟练掌握这些移动方式,你将实现从"移动光标是负担"到"移动光标就是一种享受"的转变。
5、文本编辑:增删改查完整指南
在 Vim 中,移动光标只是高效编辑的基础,而真正提升效率的核心,在于编辑命令本身。Vim 将编辑思路抽象为:
操作符(Operator) + 范围(Motion) = 编辑动作
例如:
dw # 删除一个单词
c3w # 修改三个单词
d$ # 删除到行尾
y2} # 复制两段
本章将系统讲解 Vim 的所有编辑操作,让你可以快速、精准、高效地修改文本。
5.1、插入文本(Insert)模式详解
进入插入模式的多种方式:
5.1.1、基础插入命令
| 命令 | 说明 |
|---|---|
i |
在光标前插入 |
a |
在光标后插入 |
I |
在本行第一个非空字符处插入 |
A |
在行尾插入 |
非常常用的组合:
A # 光标跳到行尾,并进入插入模式 ------ 编辑代码神器
I # 跳到缩进后开始 ------ 编辑代码行头
5.1.2、插入新行
| 命令 | 说明 |
|---|---|
o |
下方新开一行并进入插入模式 |
O |
上方新开一行并进入插入模式 |
例如:
o # 写文档时最常用
O # 向上插内容很方便
5.2、删除(Delete)操作:d 命令体系
删除在 Vim 中被称为 delete(但其实本质是剪切)。
基础删除命令
| 命令 | 功能 |
|---|---|
x |
删除光标所在字符 |
X |
删除光标左侧字符 |
dd |
删除整行(剪切整行) |
D 或 d$ |
删除到行尾 |
d0 |
删除到行首 |
dw |
删除光标到单词尾 |
diw |
删除当前单词(不包含周围空格) |
daw |
删除当前单词(包含周围空格) |
示例:
4dd # 删除 4 行
d2w # 删除两个单词
diw / daw 是编辑代码、文档时最强大的删除指令之一。
5.3、修改(Change)操作:c 命令体系
c 类似 d,但删除后会直接进入 insert 模式。
| 命令 | 功能 |
|---|---|
c + motion |
删除范围并进入插入模式 |
cc |
修改整行(删除并进入插入模式) |
cw |
修改单词的剩余部分 |
ciw |
修改整个单词 |
caw |
修改单词并保留格式 |
C |
修改到行尾(同 c$) |
例如:
ci" # 修改引号中的内容
ci( # 修改括号中的内容
ci[ # 修改方括号中的内容
ci 系列是 Vim 编辑逻辑结构最强大的命令之一:
ci(ci[ci{ci"ci'- 自动识别配对符号自动选中内容并修改
适用于代码开发、配置文件编辑等所有场景。
5.4、替换字符(Replace)操作
5.4.1、替换单个字符
r<char>
示例:
ra # 将光标字符修改为 a
5.4.2、进入替换模式(连续替换)
R
作用:像敲字一样覆盖原有文字,不是插入。
适用于对齐、覆盖、修复格式等场景。
5.5、复制与粘贴:y / p 命令体系
Vim 中复制叫 yank(提取),粘贴叫 put。
5.5.1、复制命令(y)
| 命令 | 说明 |
|---|---|
yy |
复制整行 |
y$ |
复制到行尾 |
y0 |
复制到行首 |
yw |
复制一个单词 |
yiw |
复制当前单词 |
yaw |
复制整个单词(含空格) |
5.5.2、粘贴命令(p / P)
| 命令 | 说明 |
|---|---|
p |
粘贴到光标后(行粘贴则在下方) |
P |
粘贴到光标前(行粘贴则在上方) |
例如:
yy
p # 复制一行 → 粘贴到下一行
行级粘贴自动保持缩进。
5.6、全文替换(substitute)命令
Vim 支持强大的替换语法:
:s/old/new/ # 替换当前行第一个
:s/old/new/g # 替换当前行所有
:%s/old/new/g # 替换全文
:%s/old/new/gc # 替换全文并确认(推荐)
示例:
:%s/\<test\>/TEST/gc
\<\>表示单词边界- 避免误替换部分词(如 "testing")
5.7、可视模式(Visual mode)编辑
可视模式让你像一般编辑器那样选中内容,但更强大。
进入可视模式
| 命令 | 模式 |
|---|---|
v |
字符选择 |
V |
行选择 |
Ctrl-v |
列块选择(block visual mode) |
可视模式常用操作
在选中区域后:
| 命令 | 功能 |
|---|---|
d |
删除 |
y |
复制 |
c |
修改 |
> |
向右缩进 |
< |
向左缩进 |
~ |
大小写反转 |
列块模式实例:批量插入 / 删除
添加注释:
Ctrl-v # 进入列模式
选中多行
I#<Esc> # 在每行前加上注释
去掉注释:
Ctrl-v
选中 #
x
对代码、对齐、日志处理非常强。
5.8、使用寄存器(Registers)进行高级编辑
Vim 的寄存器类似剪贴板。
5.8.1、查看所有寄存器
:reg
5.8.2、复制到指定寄存器
"ayy # 复制一行到寄存器 a
"byw # 复制单词到寄存器 b
5.8.3、从寄存器粘贴
"ap
5.8.4、特殊寄存器
| 寄存器 | 说明 |
|---|---|
" |
默认寄存器 |
0 |
保存最近 yank 的内容(不会被删除覆盖) |
* |
系统剪贴板(需要 +clipboard 编译) |
_ |
黑洞寄存器(丢弃内容) |
例如:
"_dd # 删除行但不进入剪贴板
防止覆盖复制内容。
5.9、重复与撤销 ------ 编辑的时间机器
5.9.1、重复命令
.
重复上一次操作。
例:
dw
. # 再删一个单词
. # 再删一个单词
. 是 Vim 中最强大的效率武器之一。
5.9.2、撤销与重做
| 命令 | 功能 |
|---|---|
u |
撤销 |
Ctrl-r |
重做 |
5.10、高级编辑技巧(金刚组合拳)
技巧 1:ci 系列操作
ci" # 修改引号内文本
ci( # 修改括号内文本
ci{ # 修改花括号内容
技巧 2:可视块 column edit
适用于批量缩进/注释/对齐。
技巧 3:使用 . 重复操作
删除多行:
dd .
编辑重复结构文本尤为高效。
技巧 4:数字前缀加任意编辑命令
5dw # 删除 5 个单词
10x # 删除 10 个字符
3dd # 删除 3 行
技巧 5:结合搜索与操作进行编辑
d/foo # 删除到 foo
c/bar # 修改到 bar
让你像 "激光定向切割" 一样编辑。
5.11、小结
本章从非常基础的增删改查开始,逐步扩展到 Vim 的完整编辑体系,包括:
- 插入(i/a/I/A/o/O)
- 删除(d 系列)
- 修改(c 系列)
- 替换(r/R)
- 复制/粘贴(y/p)
- 可视模式(v/V/Ctrl-v)
- 全文替换(😒)
- 寄存器操作
- 重复(.)与撤销(u/Ctrl-r)
- 搜索结合操作
- 用 motion 指定编辑范围(dw / ci" / d})
6、Vim 搜索与替换(强力编辑核心)
作为一名高效的开发者或运维人员,掌握 Vim 的搜索与替换技巧几乎是必不可少的。搜索让你在大型文件中快速定位内容,而替换能够帮助你批量修改文本内容、修正变量名、规范格式,是提升工作效率的重要技能。本章节将从最基础的单词搜索讲起,一直到正则表达式、多文件替换、全局替换等高级技巧,帮助你在 Vim 中实现真正的 "所见即所得的速度感"。
6.1、基础搜索:查找文本的所有方法
Vim 中的搜索基于正则表达式的强大能力,功能远超普通编辑器。本节从最常用的 / 搜索开始。
6.1.1、前向搜索:使用 /
格式:
/要搜索的内容
按下 / 后输入关键字,按下 Enter 即可向光标之后搜索。
示例:
/main
若文件中有 main,光标会跳到第一个匹配位置。
6.1.2、后向搜索:使用 ?
格式:
?关键字
示例:
?error
光标向上寻找 error。
6.1.3、搜索导航:跳转到下一个匹配
n:跳到下一个匹配(同方向)N:跳到上一个匹配(反方向)
无论你是 / 还是 ? 搜索,n/N 都能继续浏览结果,非常方便。
6.1.4、高亮搜索匹配
让搜索结果自动高亮:
:set hlsearch
关闭高亮:
:set nohlsearch
临时取消高亮(不关闭功能):
:noh
6.1.5、增量搜索:输入即搜索
:set incsearch
开启后输入 /mai 时,光标会实时跳转到第一个匹配位置,非常高效。
6.2、搜索模式与正则表达式
Vim 的搜索使用类 regex 的规则,可以进行强大的文本匹配。
6.2.1、匹配行首与行尾
- 行首:
^ - 行尾:
$
举例:
/^int "匹配以 int 开头的行"
/;$ "匹配以 ; 结束的行"
6.2.2、匹配任意字符与数量
.:匹配任意单字符*:匹配 0 次或多次\+:匹配 1 次或多次(Vim 特有)
示例:
/fo.*bar "匹配 foo...bar"
/ab\+c "匹配 abbbbbc"
6.2.3、字符集与范围
/[0-9] "匹配任意数字"
/[a-zA-Z] "匹配任意字母"
/[^a-z] "匹配非小写字母"
6.2.4、单词匹配
\<:单词开始\>:单词结束
示例:
/\<int\> "只匹配单词 int,不匹配 integer"
6.3、替换命令:从简单到复杂的完整规则
替换命令格式:
:[范围]s/原内容/新内容/[标志]
这是 Vim 最重要的命令之一。
6.4、最常用替换操作:快速上手
6.4.1、只替换当前行第一个匹配
:s/old/new/
替换当前行第一个 old 为 new。
6.4.2、替换当前行所有匹配
:s/old/new/g
g 表示全局(global)。
6.4.3、全文替换(最常用)
:%s/old/new/g
用法意义:
%表示全文范围s表示替换g表示替换所有匹配
6.4.4、替换时确认每次替换
加入 c 标志:
:%s/old/new/gc
每次出现 old,Vim 会提示:
replace with new? (y/n/a/q/l)
非常适用于敏感修改。
6.5、替换范围:行范围控制
你可以指定行区间:
6.5.1、指定行号替换
替换第 10 到 20 行:
:10,20s/old/new/g
6.5.2、使用.(当前行)与 $(最后一行)
从当前行到末尾:
:.,$s/old/new/g
6.5.3、使用搜索结果确定范围
从第一次出现 foo 到第一次出现 bar:
:/foo/,/bar/s/old/new/g
这是 Vim 独有的高级技巧,非常强大。
6.6、特殊替换技巧:提高效率的不传之秘
6.6.1、替换时保留部分内容(使用分组)
:%s/hello\(.*\)world/hi\1earth/g
\1 表示第一个括号内的内容。
6.6.2、删除某一模式(新内容为空)
:%s/deleteMe//g
6.6.3、替换字符串中包含 / 的情况
使用其他分隔符:
:%s+/usr/bin+/usr/local/bin+g
任何非字母数字都可以作为分隔符,如 # | , 等。
6.7、大文件优化:快速搜索技巧
6.7.1、使用 vimgrep 多文件搜索
:vimgrep /main/ *.c
搜索后通过:
:cnext:cprev:copen
进行跳转。
6.7.2、使用 :grep 外部搜索程序(如 ripgrep)
如果系统安装了 rg 或 ag:
:grep -R "hello" .
这是大型项目最快的方法。
6.8、多文件替换:真正的工程级技能
6.8.1、在多个文件中替换所有旧名字
:args *.c
:argdo %s/oldName/newName/g | update
update 表示仅在文件有变化时写入。
6.8.2、更复杂的批量替换流程
:vimgrep /oldName/ **/*.c
:copen
:cfdo %s/oldName/newName/g | update
这是 Vim 替换工程中变量名的一种常见方式。
6.9、小结:掌握搜索与替换,你的 Vim 才真正"活了"
Vim 的搜索与替换体系强大到令人惊讶。从最基础的 / 搜索,到全文替换、正则表达式、多文件替换,都让它成为文本处理的利器。掌握这些内容后,你会逐渐体验到 Vim 的真正魅力:用最少的按键完成最复杂的编辑任务,让你在高效率的路上越走越稳。
7、可视化模式(Visual Mode)入门与精通
在 Vim 的众多操作模式中,可视化模式(Visual Mode)是一个极其强大却常被新手忽视的模式。它让你可以像现代编辑器一样 "选中内容再操作",但又远超鼠标选择的能力,能实现可视化批量操作、矩形选区编辑、多行编辑、删除替换、缩进格式化等强力功能。
如果你希望在 Vim 中提升编辑效率,那么精通 Visual Mode 是迈向高手的关键步骤之一。
本章将带你从入门到精通 Visual Mode:了解 Visual 的三种模式、常用操作、典型场景、矩形编辑技巧等。
7.1、什么是可视化模式?
可视化模式是 Vim 中用于选择文本的一整套操作方式。当你进入可视化模式后,你可以通过移动光标来扩展或缩减选区,选中后可以进行:
- 删除
- 复制
- 粘贴
- 替换
- 缩进
- 格式化
- 大小写转换
- 多行批量操作
- 列编辑(矩形选择)
可视模式提供了三种方式:
- 字符可视模式(Visual) ------ 逐字符选择(
v) - 行可视模式(Visual Line) ------ 以行为单位选择(
V) - 块可视模式(Visual Block) ------ 列矩形选择(
Ctrl + v)
7.2、三种可视模式的详细说明
7.2.1、字符可视模式(v)
进入方式:
v
作用:
从光标处开始选中具体字符范围。
示例场景:
- 只选中某段单词的一部分
- 选中某个括号内的内容
- 精准选择不规则区域
常用操作:
d 删除选区
y 复制选区
c 修改选区
~ 大小写反转
u 全部转为小写
U 全部转为大写
> 增加缩进
< 减少缩进
7.2.2、行可视模式(V)
进入方式:
V
作用:
选中一整行,无论光标在哪个位置。
场景:
- 批量处理多行代码
- 一次性注释、删除、复制代码块
- 配合
><调整缩进
示例:
Vjjd 选中当前行往下两行 → 删除
7.2.3、块可视模式(Ctrl + v)
进入方式:
Ctrl + v
这是 Vim 的"神器"之一,可进行矩形列选择。
矩形选择能够:
- 编辑多行的同一列
- 批量插入前缀
- 批量删除列文本
- 编辑多行的函数对齐
- 在列上添加注释、分号、冒号等
例子非常多,后面会详细讲。
7.3、Visual Mode 的光标移动(重点)
你可以在可视模式中使用所有普通模式的光标移动键:
hjklwbe:按单词移动{}:按段落移动0$:移到行首行尾f{char}:移动到某字符下一个出现的位置%:跳转括号配对ggG:跳到文件开头/结尾
可视选区会随着光标移动实时更新,非常直观。
7.4、可视模式最常用操作大全
以下所有快捷键都在 Visual Mode 下有效:
| 操作 | 快捷键 | 说明 |
|---|---|---|
| 删除 | d |
删除选区 |
| 复制 | y |
复制选区 |
| 修改 | c |
删除并进入插入模式 |
| 粘贴 | p |
粘贴到选区后 |
| 缩进 | > < |
批量缩进/反缩进 |
| 格式化 | = |
自动对齐代码 |
| 大小写 | u/U/~ |
小写、大写、反转 |
| 选择扩展到匹配括号 | % |
强大的代码操作技巧 |
7.5、实用技巧:可视模式批量操作实例
以下是一些新手与高手都会用到的技巧。
7.5.1、批量给多行添加注释
选中多行:
Vjj
添加注释:
I// <Esc>
解释:
I:在选区每行行首插入内容<Esc>:应用到所有行
7.5.2、批量删除多行的同一列字符(如对齐的分号)
进入块可视模式:
Ctrl + v
移动光标选择需要删除的列,然后按:
d
7.5.3、多行批量添加缩进
V10j > "向右缩进11行
V3k < "向左缩进4行
7.5.4、替换一整块文本
v 选区
c 修改内容
7.5.5、自动格式化一组代码
V%
=
说明:
V%:选中括号内所有内容=:格式化代码
7.6、Visual Block(可视块)模式高级操作
Visual Block 是 Vim 的强大武器之一。
7.6.1、给多行添加公共前缀(如注释)
Ctrl + v
j j j
I// <Esc>
例如给 10 行代码全部加上 //。
7.6.2、给多行添加公共后缀(如逗号)
Ctrl + v
选中列
A, <Esc>
7.6.3、多行批量对齐变量、等号等
示例代码:
int a = 1;
long variableName = 2;
char c = 3;
使用块可视:
Ctrl + v
$ 选中到末尾
=
自动对齐变得整齐美观。
7.7、可视模式结合搜索的高级用法
7.7.1、搜索并开始可视选择
/hello
v
7.7.2、选中两个搜索结果之间的文本
/begin
v
/end
直接选中 begin 与 end 间的所有内容。
7.8、可视模式 + 寄存器:增强复制粘贴
在 Visual Mode 中:
"ay 复制到寄存器 a
"kp 从寄存器 k 粘贴
适用于代码片段管理。
7.9、恢复选区(超实用)
误按 ESC 取消可视模式了?
按:
gv
恢复上次选区!
这是 Vim 用户最喜欢的小技巧之一。
7.10、小结:Visual Mode 是你在 Vim 中的 "增强手臂"
可视化模式既保留了现代编辑器的直观性,又有强大的块操作能力。掌握 Visual Mode,你可以:
- 批量修改代码
- 快速删除/复制结构化文本
- 进行列编辑
- 完整控制每一段内容的格式与对齐
学会这些内容,你已经具备了 Vim 高效编辑的核心技能。
8、多窗口与多文件编辑(Vim 的生产力关键)
对于初学者来说,Vim 是一个 "单文件编辑器";但对于真正的使用者来说,Vim 是一个强大的多文件、多窗口集成开发环境。你可以在同一个 Vim 实例中同时打开多个文件,将文件并排显示、上下分屏、快速切换、同步编辑,甚至可以把 Vim 当成轻量级 IDE 来使用。
本章将从基础到进阶,全面讲解 Vim 的多窗口(window)、多缓冲区(buffer)、多标签页(tab)操作,让你真正掌握 Vim 的生产力武器。
8.1、关键概念:Buffer、Window、Tab 之间的关系
在正式操作之前,必须理解 Vim 的三个核心概念:
8.1.1、Buffer(缓冲区)------ "文件的载体"
你打开一个文件,Vim 并不是直接在文件上操作,而是把它加载到内存中的 buffer:
- 一个 buffer = 一个正在编辑的文件内容副本
- 修改 buffer 后,通过
:w才写回磁盘 - buffer 即使不显示在窗口中也仍然存在
查看所有缓冲区:
:ls
8.1.2、Window(窗口)------"Buffer 的视图"
窗口是 buffer 的可视化呈现方式。
- 多个窗口可以显示同一个 buffer
- 常用来做 "代码对照"、"一边写一边看头文件"等任务
- 关闭窗口不会删除 buffer
8.1.3、Tab(标签页)------"窗口组"
一个 Tab 是多个窗口的集合。
- 每个 Tab 可以包含多个 window
- 各自独立布局
- 用途类似 VSCode 里的多个工作区
8.2、多文件打开方式
Vim 支持多种一次性打开多个文件的方法。
8.2.1、启动时打开多个文件
vim file1 file2 file3
Vim 会加载多个 buffer,但显示一个窗口。
8.2.2、在 Vim 内打开文件
:e main.c
:e test.c
8.2.3、文件切换命令
| 命令 | 作用 |
|---|---|
:bn |
切到下一个 buffer |
:bp |
切到上一个 buffer |
:b 3 |
切到 buffer 3 |
:b filename |
通过文件名部分匹配切换 |
8.3、分屏(Window Split)与窗口管理
分屏是 Vim 的生产力关键之一,操作非常灵活。
8.3.1、水平分屏
:sp file
不带文件名:
:sp
表示分屏显示当前文件的两个视图。
8.3.2、垂直分屏
:vsp file
同理:
:vsp
表示垂直分屏当前 buffer。
8.3.3、分屏的快捷窗口切换
| 快捷键 | 功能 |
|---|---|
Ctrl + w h |
移动到左边窗口 |
Ctrl + w l |
移动到右边窗口 |
Ctrl + w j |
移动到下边窗口 |
Ctrl + w k |
移动到上边窗口 |
Ctrl + w w |
在窗口间循环切换 |
8.3.4、调整分屏大小
Ctrl + w = 让所有窗口等宽等高
Ctrl + w + 增加高度
Ctrl + w - 减少高度
Ctrl + w > 增加宽度
Ctrl + w < 减少宽度
8.3.5、关闭窗口
Ctrl + w c 关闭当前窗口
Ctrl + w q 如果只剩一个窗口则退出 Vim
8.4、在多个窗口中同步查看同一文件
8.4.1、分屏显示同一个文件
:sp
:vsp
这样你可以:
- 上面看定义,下面看实现
- 左边看头文件,右边看源文件
- 一边查找,一边阅读结果
8.4.2、光标同步滚动(可选插件功能)
Vim 原生不支持,但你可以:
- 在左窗口查找符号(
*) - 在右窗口查看对应上下文
8.5、标签页(Tab)操作
标签页适合组织项目文件,让 Vim 像 IDE 一样使用。
8.5.1、创建标签页
:tabnew file
不带文件名:
:tabnew
打开空的窗口组。
8.5.2、常用 Tab 操作
| 命令 | 说明 |
|---|---|
:tabn |
下一个标签 |
:tabp |
上一个标签 |
:tabc |
关闭当前标签 |
:tabo |
关闭其他标签,只保留当前 |
8.5.3、使用快捷键切换标签
gt Go to next tab
gT Go to previous tab
8.6、多文件编辑常用技巧(提高学习效率)
8.6.1、使用 quickfix 显示搜索结果/编译错误
搜索结果:
:vimgrep /pattern/ *.c
:copen
打开 quickfix 窗口后,可以:
:cn 下一个匹配
:cp 上一个匹配
适用于大型项目。
8.6.2、快速打开最近编辑的文件
:e #
超级实用的切回前一个文件技巧。
8.6.3、使用 :args 管理文件参数列表
:args *.c
然后:
:next
:previous
在文件列表中快速跳转。
8.7、多窗口与多文件编辑的典型使用场景
场景 1:头文件与源文件对照编辑
:vsp main.c
:vsp main.h
通过 Ctrl + w h/l 快速切换查看声明与实现。
场景 2:复制某个函数到另一个文件
左窗口:源文件
右窗口:目标文件
Ctrl + w v
用 Visual Mode 选中并粘贴。
场景 3:查找跨文件内容并快速定位
:vimgrep /someFunc/ *.c
:copen
场景 4:使用标签页组织不同模块
tab1:网络模块
tab2:数据库模块
tab3:日志模块
8.8、Buffer、Window、Tab 之间最佳实践建议
- 用 buffer 管理文件:随时切换,不要重复打开同一个文件
- 用 window 分屏阅读和对照
- 用 tab 组织不同主题的任务
- 不要滥用 tab(不是 Chrome)
结构建议:
- 编辑同一模块:多窗口
- 跨模块开发:多标签页
- 批量操作:buffer 切换
8.9、小结:多窗口与多文件是 Vim 的生产力核心
如果说普通输入与光标移动是 Vim 的基础,那么多窗口与多文件编辑就是 Vim 的"战斗力"。
掌握这些,你就可以:
- 一次性处理多个文件
- 并排对照内容
- 在大型项目中高效导航
- 实现接近 IDE 的开发体验
这部分能力通常是新手与高手的真正分水岭。
如果你已经掌握了这些技巧,你已经迈入 Vim 高效编辑的大门。
9、Vim 常用配置与 .vimrc 入门
如果说 Vim 的模式、移动、编辑命令构成了 "基础能力",那么配置文件 .vimrc 则是让 Vim 真正成为 "你的编辑器" 的关键所在。Vim 的强大不仅来自它本身,更来自它极高的可定制度:几乎所有行为都可以控制、修改甚至扩展。
这一章将从基础概念、常用配置,到插件系统、结构化配置逐步讲解,让你能够打造自己的高效 Vim 环境。
9.1、Vim 配置文件简介
Vim 的配置分为两类:
9.1.1、用户级配置
路径:
~/.vimrc (最常使用)
特点:
- 当前用户专属
- 修改后只影响该用户
- 建议把所有配置都写入此文件
9.1.2、系统级配置
路径:
/etc/vimrc
特点:
- 对系统所有用户生效
- 一般不推荐随意修改
9.1.3、目录结构(可选)
用户的 Vim 配置一般还包括:
~/.vim/
├── plugin/ # 这里放插件脚本
├── colors/ # 颜色主题
├── autoload/ # 自动加载脚本
├── indent/ # 缩进规则
└── syntax/ # 语法高亮脚本
9.2、.vimrc 的基本语法规则
VimScript 作为 Vim 的配置语言,语法简单:
注释
" 这是注释
设置选项
set number
set relativenumber
关闭某选项
set nonumber
布尔值选项
开启:
set ignorecase
关闭:
set noignorecase
赋值选项
set tabstop=4
set shiftwidth=4
set encoding=utf-8
9.3、Vim 常用基础配置
以下是一个新手必须掌握的高频配置。每个配置都附带解释。
9.3.1、界面与显示优化
显示行号
set number
相对行号(强烈推荐,用于跳转)
set relativenumber
高亮当前行
set cursorline
括号匹配高亮
set showmatch
开启语法高亮
syntax on
自动换行(不推荐)
set wrap
关闭:
set nowrap
9.3.2、缩进与 Tab 相关配置
设定 Tab 宽度为 4:
set tabstop=4
自动缩进宽度 4:
set shiftwidth=4
将 Tab 转为空格(强烈推荐)
set expandtab
自动缩进
set autoindent
set smartindent
智能缩进适合 C 系语言。
9.3.3、搜索相关设置
忽略大小写
set ignorecase
智能大小写(如果包含大写字母则大小写敏感)
set smartcase
搜索高亮
set hlsearch
取消高亮:
:noh
9.3.4、编码设置
set encoding=utf-8
set fileencodings=utf-8,ucs-bom,gb2312,gbk
9.3.5、提升编辑体验
菜单增强
set wildmenu
快速文件补全
set wildmode=longest:full,full
9.3.6、剪贴板互通(与系统剪贴板共享)
Linux 推荐开启:
set clipboard=unnamedplus
9.4、映射(快捷键)设置
映射让 Vim 更像 IDE。
基础映射语法
nnoremap <快捷键> <命令>
vnoremap <快捷键> <命令>
inoremap <快捷键> <命令>
nore 防止递归映射(最佳实践)。
示例:快速保存退出
nnoremap <C-s> :w<CR>
nnoremap <C-q> :q<CR>
示例:快速切换窗口
nnoremap <leader>h <C-w>h
nnoremap <leader>l <C-w>l
(leader 键下面讲)
9.5、Leader Key(领导键)是什么?
Leader 是一个自定义前缀键,用于自定义快捷键组合。
默认:\
常改为:, 或 空格
let mapleader=" "
之后你可以:
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
9.6、插件管理器(Plugin Manager)简介
Vim 原生支持插件,但手动摆放很麻烦,因此需要插件管理器。
推荐使用:
9.6.1、vim-plug(最流行)
安装:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
.vimrc 配置示例:
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
Plug 'junegunn/fzf.vim'
Plug 'vim-airline/vim-airline'
Plug 'tpope/vim-commentary'
call plug#end()
安装插件:
:PlugInstall
9.6.2、Vundle
旧主流,不建议新手使用。
9.6.3、Pathogen
适合手动控制,每个插件一个目录。
9.7、推荐插件(新手到进阶)
文件树插件
Plug 'preservim/nerdtree'
模糊查找(强烈推荐)
Plug 'junegunn/fzf.vim'
状态栏增强
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
注释插件
Plug 'tpope/vim-commentary'
语法与代码补全(强大)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
提供类似 VSCode 的智能补全。
9.8、一个结构化优秀 .vimrc 示例(推荐新手使用)
" ===== 基础设置 =====
set nocompatible
syntax on
set number
set relativenumber
set cursorline
set showmatch
set encoding=utf-8
set clipboard=unnamedplus
" ===== 缩进设置 =====
set tabstop=4
set shiftwidth=4
set expandtab
set autoindent
set smartindent
" ===== 搜索优化 =====
set hlsearch
set ignorecase
set smartcase
" ===== leader 键 =====
let mapleader=" "
" ===== 快捷键 =====
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
" ===== 插件管理 =====
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
Plug 'junegunn/fzf.vim'
Plug 'vim-airline/vim-airline'
Plug 'tpope/vim-commentary'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
call plug#end()
该配置:
- 实用但不臃肿
- 适合新手与开发者
- 可扩展
9.9、Vim 配置最佳实践
- 配置从简单开始,不要一上来就复制巨大的 .vimrc
- 遇到问题再加配置,而不是"预设未来需求"
- 插件不要越多越好,只要高质量
- 有计划地组织你的 Vim 环境
9.10、小结
Vim 的强大不只是键位和模式,而是高度可定制化的配置系统。通过掌握 .vimrc、快捷键映射、插件管理、新手友好的配置结构,你已经可以打造一个属于自己的高效编辑环境。
这一章让你从 "会用 Vim" 迈向 "用 Vim 更快、更强"。
10、Vim 插件生态与插件管理器
Vim 的强大不仅来自它的编辑哲学,还来自庞大且高度自由的插件生态。几乎你能想到的功能,都已经有人以插件的方式实现:文件树、代码补全、调试器集成、主题配色、Git 工具、括号补全、模糊搜索......
如果说 .vimrc 决定了你的 Vim 基础体验,那么插件就决定了你的 Vim 是否真正成为 "开发利器"。
本节将从插件机制原理、主流插件管理器、安装及使用方式、插件推荐等方面帮助你全面了解 Vim 插件生态。
10.1、Vim 插件是什么?为什么需要插件?
Vim 插件本质上是一组 Vim 脚本文件(.vim、lua、autoload、syntax 等),通过 Vim 的运行机制被加载,从而改变或扩展默认行为。
插件通常包含以下功能:
- 编辑体验增强:自动补全、语法高亮、括号补全、智能缩进
- 跳转提升:模糊搜索、目录树浏览、快速跳转
- 开发者工具:LSP 支持、Git 集成、调试工具
- 审美提升:主题配色、状态栏美化
- 语言支持:Rust、C++、Go、Python 的语法包、工具集成
简单来说:
插件让 Vim 从 "编辑器" 变成 "IDE"。
10.2、Vim 插件的加载机制(重要概念)
Vim 在启动时,会按照特定顺序加载插件:
~/.vim/plugin/*.vim
~/.vim/ftplugin/
~/.vim/autoload/
~/.vim/colors/
~/.vim/syntax/
其中:
plugin/:在启动时自动加载autoload/:按需加载,提高性能(现代插件普遍用这种结构)syntax/:语法支持colors/:主题配色ftplugin/:针对特定文件类型的配置
插件管理器会自动把插件放到这些目录下,而无需你手动整理。
10.3、手动安装插件(不推荐但需理解)
旧时代的方式:
mkdir -p ~/.vim/plugin
cp myplugin.vim ~/.vim/plugin/
缺点:
- 难以更新
- 难以删除
- 插件版本混乱
- 需要你手动管理依赖、autoload 等
因此现在几乎不再提倡手动方式。
插件管理器是现代 Vim 使用的核心。
10.4、主流插件管理器对比(非常重要)
10.4.1、Pathogen(元老级)
功能:把每个插件放在单独目录,简化管理
优点:结构简单
缺点:不支持自动更新、不支持依赖管理、不支持按需加载
适合:老项目维护,不推荐新手使用
10.4.2、Vundle(曾经最流行)
特点:
- 类似 VIM 的 apt-get
- 支持
:PluginInstall、:PluginUpdate - 插件使用 Git 管理
缺点:
- 加载速度慢
- 不支持懒加载(lazy load)
- 已多年不更新
不再推荐,进入 "历史阶段"。
10.4.3、vim-plug(目前最流行的 Vim 插件管理器)
使用最广泛的现代管理器。
优点:
- 支持懒加载(按需加载,加快启动速度)
- 安装速度非常快(并行下载)
- 支持 Git/SVN/本地等来源
- 社区资源丰富
- 支持插件更新、卸载
安装只需一句命令:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
插件声明放在:
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
Plug 'junegunn/fzf.vim'
call plug#end()
然后:
:PlugInstall
建议:
Vim 用户:首选 vim-plug
10.4.4、Lazy.nvim(Neovim 现代管理器)
如果你是 Neovim 用户,则:
- lazy.nvim 是最佳选择
- 采用 Lua 编写,性能极高
- 超强懒加载机制
- 自动依赖管理
- Github 社区高度活跃
但你使用的是原版 Vim,本节不展开。
10.5、如何使用 vim-plug 管理插件(完整示例)
安装 vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
配置示例(非常常用)
call plug#begin('~/.vim/plugged')
" 文件树
Plug 'preservim/nerdtree'
" Git 工具
Plug 'tpope/vim-fugitive'
" 主题
Plug 'morhetz/gruvbox'
" 状态栏
Plug 'vim-airline/vim-airline'
" 模糊搜索
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
" 自动补全括号
Plug 'jiangmiao/auto-pairs'
call plug#end()
然后执行:
:PlugInstall
更新插件:
:PlugUpdate
卸载插件:
:PlugClean
10.6、Vim 高频必备插件推荐(新手 → 进阶 → 专业)
以下根据用途整理,你可直接复制到 .vimrc 中使用。
10.6.1、文件管理类插件
NERDTree -- 最流行的树状目录
Plug 'preservim/nerdtree'
功能:
- 左侧显示文件树
- 快速打开文件
- 创建/删除/移动 文件树操作
适合所有用户。
10.6.2、代码搜索 / 跳转工具
fzf / fzf.vim -- 超强模糊搜索
Plug 'junegunn/fzf'
Plug 'junegunn/fzf.vim'
支持:
- 全文件搜索
- 文件内容搜索
- Git 文件搜索
性能极高,是现代 Vim 必装插件之一。
10.6.3、Git 集成工具
vim-fugitive -- 最强 Git 插件
Plug 'tpope/vim-fugitive'
支持:
- :Git status、commit、push、pull
- diff
- 与 fzf 等配合
如果你使用 Vim 进行开发,必装。
10.6.4、自动补全工具
YouCompleteMe(YCM)--- C++ 程序员最爱
大型项目使用频率极高。
(安装过程复杂,需要编译,不在此展开)
10.6.5、语法高亮与 LSP 支持
vim-polyglot -- 全语言语法包
Plug 'sheerun/vim-polyglot'
支持 100+ 语言,非常适合新手。
10.6.6、美化类插件
主题:Gruvbox
Plug 'morhetz/gruvbox'
colorscheme gruvbox
airline(状态栏美化)
Plug 'vim-airline/vim-airline'
让 Vim 更 "现代"。
10.7、如何选择插件?(给新手的建议)
不要贪多。
一个常见错误:
新手安装了 50 个插件,结果 Vim 变慢、快捷键冲突、启动卡顿。
正确方式:
- 保持 10--20 个以内
- 每个插件解决一个明确问题
- 在
.vimrc中记录"这是干什么的" - 不要装重复功能插件
- 学会删除插件(养成简洁习惯)
10.8、插件冲突与性能问题排查技巧
10.8.1、启动慢?
执行:
vim --startuptime log.txt
查看哪个插件耗时明显。
10.8.2、某个功能失效?
尝试:
vim -u NONE
排除所有插件,确认是插件问题还是 Vim 本身问题。
10.8.3、检查插件冲突
关闭一半再测试(折半查找法):
" 临时注释掉部分 Plug 'xxx' 查看效果
10.9、插件管理最佳实践
- 使用 vim-plug
- 避免安装过多插件
- 经常
:PlugUpdate保持最新 - 使用懒加载提升启动速度
- 设置合理的插件目录结构
- 从必备插件开始构建属于你的 Vim
11、实战:用 Vim 做一次完整编辑任务
理论永远不如实战来得深刻。本节将带你完成一次真实的 Vim 编辑任务,从打开文件、浏览内容、进行修改、搜索替换、分屏编辑、多文件切换到最终保存退出。读完并亲手操作一次后,你将真正体会到 Vim 的强大与高效。
为了让例子更加贴近真实开发,我们假设你需要对一个项目里的两个文件进行修改:
main.cutils.c
任务目标如下:
- 打开
main.c - 快速浏览代码结构
- 修改函数名称
- 搜索替换内部调用
- 使用分屏同时查看
utils.c - 删除多余代码块
- 复制另一段代码并粘贴到正确位置
- 保存所有修改并退出
只需要 Vim,无需插件。
11.1、第一步:进入项目并打开主文件
在终端中,进入项目目录:
cd myproject
打开 main.c:
vim main.c
进入 Vim 后默认处于 Normal 模式。
11.2、第二步:快速浏览代码结构(光标移动)
假设你需要找到 process_data() 函数的位置。
你可以使用 Vim 的跳转能力:
快速跳行
gg 回到文件开头
G 跳到文件结尾
50G 跳到第 50 行
查找函数名(最常用)
/process_data
按 n 继续向下查找,N 向上查找。
找到目标函数。
11.3、第三步:修改函数名称(文本编辑)
假设你需要将:
process_data
替换成:
handle_data
在函数定义处,将光标放在单词上,按:
cwhandle_data<Esc>
解读:
cw:删除当前单词并进入插入模式- 输入新的内容
- 按
<Esc>回到 Normal 模式
Vim 的编辑哲学:操作符 + 动作(change + word)。
11.4、第四步:搜索并替换所有调用
修改函数定义只是第一步,所有调用也必须同步更新。
进入命令行模式:
:%s/process_data/handle_data/g
含义:
%:全文件s:substitute(替换)g:全行替换所有匹配
执行后,所有调用自动更新。
11.5、第五步:打开第二个文件并分屏
现在你需要查看 utils.c 中的一段逻辑,以确认函数调用关系。
无需退出 Vim,直接输入:
:vsp utils.c
含义:
vsp:垂直分屏(vertical split)- 分屏后左右各显示一个文件
分屏切换
Ctrl + w, h 切到左侧
Ctrl + w, l 切到右侧
现在你可以同时查看 main.c 与 utils.c。
11.6、第六步:删除 utils.c 中的无用代码块
假设你发现 utils.c 中有一段无用函数,需要删除:
移动光标到函数开头:
/deprecated_func
找到后,删除整个函数:
d}
含义:
}跳转到当前代码块结尾d}删除直到代码块结尾
非常适合 C/C++/Java/Python 等基于花括号或缩进的语言。
11.7、第七步:复制另一段函数并粘贴到 main.c
假设在 utils.c 中你想把 helper() 函数复制到主文件中。
11.7.1、在 utils.c 里选中整个函数
将光标放在函数首行,按:
V}y
解释:
V:进入行可视化模式}:选中到当前代码块末尾y:复制(yank)
函数已在寄存器中。
11.7.2、切回 main.c 的分屏
Ctrl + w, h
11.7.3、移动到目标插入点
假设你要把函数粘贴到文件末尾:
G
11.7.4、粘贴
p
大功告成。
11.8、第八步:保存并退出所有文件
一个命令同时保存所有文件:
:wa
同时退出:
:qa
或者保存并退出:
:wqa
11.9、完整任务流程回顾(超高效率版)
你刚刚完成了一个常见的开发编辑流程:
- 打开文件
- 快速导航
- 修改函数名
- 全局搜索替换
- 分屏打开第二个文件
- 删除无用代码
- 复制另一个文件中的函数
- 粘贴到主文件
- 保存退出
全部过程几乎不需要触摸鼠标,仅用键盘即可完成,这正是 Vim 高效开发的核心价值。
12、Vim 高级技巧(熟练者必看)
当你已经掌握基本移动、编辑、搜索、分屏、可视模式等功能后,就已经超越了大部分 Vim 初学者。但 Vim 的深度远不止于此:宏、寄存器、折叠、缓冲区、标记、跳转列表、文本对象、批量替换......这些高级技巧能让你从 "熟练使用" 提升到 "极致高效"。
本章将带你全面掌握 Vim 的核心高级功能,帮助你实现真正意义上的 "键盘即生产力"。
12.1、宏(Macro):让重复操作一键完成
宏是 Vim 中最强大的自动化能力之一。它能记录你的操作并反复执行,非常适合批量插入、格式化、修改重复结构等任务。
12.1.1、录制宏
qa
含义:
q:开始录制a:录制到寄存器 a
录制过程中,你做的每一个操作都会被记录。
录制完成后,按:
q
结束录制。
12.1.2、执行宏
@a
表示执行寄存器 a 中的宏。
反复执行:
@@
执行上一次的宏。
12.1.3、执行 n 次宏
如 10 次:
10@a
12.1.4、宏应用示例:批量添加分号
假设每行末尾缺少 ;:
qaA;<Esc>j q
逐行运行:
@a
非常适合大规模重复编辑。
12.2、寄存器(Registers):剪贴板的超能力
Vim 的寄存器是一个"多剪贴板系统"。
输入:
:registers
查看所有寄存器。
12.2.1、寄存器分类
| 寄存器 | 功能 |
|---|---|
"" |
默认寄存器,所有删除与复制会写入 |
"0 |
复制寄存器,不被删除操作覆盖 |
"1~"9 |
删除历史(类似回收站) |
"a~"z |
自定义寄存器,可读写 |
"* |
系统剪贴板(在支持 GUI 或编译时启用 clipboard 时) |
"+ |
系统剪贴板 |
"/ |
搜索寄存器 |
"% |
当前文件名 |
": |
最近的命令 |
". |
最近插入的文本 |
12.2.2、指定寄存器复制粘贴
复制到 a 寄存器:
"ay
从 a 寄存器粘贴:
"ap
12.2.3、从系统剪贴板复制/粘贴
复制到系统剪贴板:
"+y
从系统剪贴板粘贴:
"+p
非常适合和浏览器、编辑器交互。
12.3、折叠(Folding):隐藏不重要代码,提高阅读效率
Vim 支持以多种方式折叠函数、类、注释块。
12.3.1、打开折叠功能
:set foldmethod=indent
或按语法折叠:
:set foldmethod=syntax
12.3.2、折叠操作
| 命令 | 功能 |
|---|---|
zc |
折叠当前代码块 |
zo |
打开当前折叠 |
za |
折叠/展开切换 |
zM |
折叠所有 |
zR |
展开所有 |
折叠对于大型 C/C++/Python 项目非常有用。
12.4、缓冲区(Buffer):多文件编辑的核心
缓冲区是 Vim 内存中的已打开文件列表。
查看所有缓冲区:
:ls
12.4.1、切换缓冲区
:bn 下一个
:bp 上一个
:b 3 跳到编号 3
12.4.2、删除(关闭)缓冲区
:bd
不会关闭窗口,只会关闭文件。
12.4.3、常用操作模式:用缓冲区管理多文件
例如你打开 5 个文件,不必分屏,只需:
:b next
:b previous
快速跳转,即便是 20+ 文件也很轻松。
12.5、标记(Marks)与跳转(Jumps):文件内外快速定位
12.5.1、设置标记
在某行按:
ma
设置一个名为 a 的标记。
12.5.2、跳转到标记
`a
跳转到标记的精确位置
(反引号)
'a
跳转到标记所在行
(单引号)
12.5.3、文件间跳转(非常实用)
继续写代码时:
Ctrl + o 回到上一次位置(后退)
Ctrl + i 向前跳
类似浏览器的前进后退,非常高效。
12.6、文本对象(Text Object):Vim 编辑效率的灵魂
文本对象允许 "语义化操作",例如删除括号内所有内容、修改引号内字符串。
常用文本对象:
| 对象 | 描述 |
|---|---|
iw |
单词内部 |
aw |
一个单词(含空格) |
i" |
引号内 |
i' |
单引号内 |
i( / a( |
圆括号 |
i[ / a[ |
方括号 |
i{ / a{ |
花括号 |
ip |
段落 |
it |
标签内(HTML/XML) |
示例:删除括号内内容
di(
修改括号内内容:
ci(
这是 Vim 最有逻辑美的部分。
12.7、替换的高级用法:使用正则表达式
Vim 支持强大的正则。
例如给每行末尾加 semicolon:
:%s/$/;/g
批量将 tab 换成 4 空格:
:%s/\t/ /g
删除空行:
:g/^$/d
12.8、高效输入技巧:点命令、重复次数、组合键
12.8.1、点命令(.)
. 表示重复上一个修改操作。
例如:
x
删除一个字符,然后按:
.
会连续删除下一个字符。
12.8.2、数字前缀
10j
向下 10 行
5dw
删除 5 个单词
20i*<Esc>
插入 20 个星号
12.8.3、操作符组合技巧
删除从当前位置到下一个 foo:
d/foo<Enter>
非常强大。
12.9、综合示例:30 秒完成复杂编辑
任务:将括号内所有数字替换成 0,并删除多余空行。
:%s/(\d\+)/\(0\)/g
:g/^$/d
如果需要重复任务:
录制一个宏即可。
12.10、小结
本章介绍了 Vim 的核心高级功能:
- 宏:处理重复操作的神器
- 寄存器:多剪贴板系统
- 折叠:简化大文件阅读
- 缓冲区:多文件管理核心
- 标记与跳转:文件内外自由移动
- 文本对象:最强编辑方式
- 正则替换:批量处理文本
- 点命令、数值前缀:极致效率
掌握这些技巧后,你已经进入 Vim 用户中的"熟练者"甚至"高手"行列。
13、"Vim 难学点" 与新手常见坑总结
尽管 Vim 是一个高效、强大的编辑器,但对于初学者而言,它的学习曲线确实陡峭。很多人第一次启动 Vim,就直接 "被困住",甚至连退出都不会。为了帮助你顺利跨过这条 "痛苦期曲线",本章将系统总结 Vim 的难学点与最常见的新手坑,并给出易懂的解释与解决方案。
13.1、为什么 Vim 给人 "难" 的第一印象?
Vim 的理念与主流编辑器截然不同:
- 它不是 "所见即所得" 的编辑器,而是 "模式化编辑" 工具。
- 它假设用户不依赖鼠标,全部操作依靠键盘。
- 它不追求功能显眼,而追求效率最大化。
因此,新手第一次接触到 Vim 会遇到典型问题:
- 不能直接输入文字
- 想退出却不知道怎么退
- 命令太多、记不住
- 配置文件让人头大
- 操作方式与常规编辑器相反
但当你熬过 "黑暗森林期",你会发现 Vim 的设计极其优雅,效率惊人。
13.2、新手最常见的坑与解决方案
以下是使用 Vim 过程中,初学者最容易掉进的坑(真人经验总结):
坑 1:进 Vim 之后发现 "我为什么不能打字?"
原因
Vim 默认进入 普通模式(Normal mode),不能直接输入文字。
解决办法
记住 Vim 的 "金三角模式":
| 模式 | 用途 | 进入方式 |
|---|---|---|
| Normal | 主要做编辑操作、移动光标 | 按 ESC |
| Insert | 输入文本 | 按 i / a / o |
| Visual | 选择文本 | 按 v / V / Ctrl+v |
👉 只要按 ESC 就能回到 Normal 模式。
坑 2:"怎么退出啊?!"(Vim 最大名场面)
最著名的新手问题。
解决办法(必须记住)
| 目的 | 命令 |
|---|---|
| 保存并退出 | :wq |
| 不保存退出 | :q! |
| 保存但不退出 | :w |
| 强制退出所有窗口 | :qa! |
一定要从 Normal 模式开始输入命令:
ESC:- 输入退出命令
坑 3:搞不清模式切换,越用越混乱
新手常常:
- 在 Insert 模式狂按
h j k l - 在 Normal 模式死按退格键
- 在 Visual 模式不小心删除选区
解决方案:建立模式意识
用一句话记住:
Normal:动词模式
Insert:写字模式
Visual:选择模式
命令行(:):功能模式
每天使用 Vim 都要在心里默念这句话,直到成自然反应为止。
坑 4:不知道如何高效移动光标,用方向键慢慢挪
方向键可以用,但效率极低。
解决方案:记住最基础的 hjkl
| 按键 | 方向 |
|---|---|
| h | 左 |
| j | 下 |
| k | 上 |
| l | 右 |
然后逐渐进阶到词/行级移动:
w:下一个单词开头b:上一个单词开头0:行首$:行尾gg:文件开头G:文件结尾
如果你总是想按方向键,建议强制自己练习:
👉 把方向键映射成无效键(在 .vimrc 中加入)
nnoremap <Up> <NOP>
nnoremap <Down> <NOP>
nnoremap <Left> <NOP>
nnoremap <Right> <NOP>
坑 5:删除、修改命令太多,分不清 "d"、"c"、"y"
最核心记忆法
d(delete)删除并复制
c(change)删除并进入 Insert 模式
y(yank)复制
只要知道这三个是"操作",而 "移动命令" 可以作为 "对象",你就理解了:
例如:
| 命令 | 含义 |
|---|---|
dw |
删除到单词末尾 |
cw |
修改到单词末尾 |
y$ |
复制到行尾 |
dd |
删除整行 |
cc |
修改整行 |
Vim 的命令组合很有规律,你要学的是"语法结构",不是死记命令。
坑 6:搜索后高亮不消失,看得眼睛难受
搜索 /xxx 或 ?xxx 后, Vim 会保持高亮。
解决办法
临时取消:
:noh
也可以映射快捷键(例如 <leader>h):
nnoremap <leader>h :nohlsearch<CR>
坑 7:Visual Mode(可视模式)不知怎么退出,常常误删内容
Visual 模式看似简单,但容易误操作,因为按 d 就会删掉选区。
退出可视模式的方法
最简单:
ESC
记住:ESC 是万物归一的出口。
坑 8:分屏之后不知道怎么切换窗口、关闭窗口
新手常常会:
- 切不了分屏
- 误删不该删除的窗口
- 找不到当前焦点在哪
记住窗口操作四件事
-
创建窗口
:sp # 水平 split
:vsp # 垂直 split -
切换窗口
Ctrl + w + h/j/k/l
-
关闭窗口
:q
-
调整窗口大小
Ctrl + w + <
Ctrl + w + >
Ctrl + w + =
坑 9:插件太多,Vim 变卡或冲突不断
常见错误:
- 第一天装十几个插件
- 装了相同功能的插件冲突
- 装了插件却不会配置
建议
- 初学者插件 不超过 3 个 :
vim-plug(插件管理器)nerdtree(文件树)vim-airline(状态栏优化)
- 学会后再逐步增加,比如:
fzf.vim(模糊搜索)coc.nvim(强大 IDE 功能)
记住:插件是提高生产力的,不是用来堆砌的。
坑 10:害怕使用 Normal 命令,只用 Insert 模式当普通编辑器
这是最大损失。
解决方案
逐步打破舒适区,建议学习路线:
- 熟练 Insert → Normal 切换(最关键)
- 学习单词级移动
- 学习基础删除/复制/修改命令
- 练习文本对象(
iw,ip,i(等)
Normal 模式是 Vim 的灵魂,越早熟悉,收益越大。
13.3、Vim 的 "难点" 其实都有规律
Vim 之所以难,是因为:
- 模式多
- 操作命令多
- 输入方式与主流编辑器完全不同
但一旦理解其规则性,你会发现 Vim 的设计极其一致:
13.3.1、所有命令都有语法结构
操作 动作
例如:
d + w:删除一个词y + $:复制到行尾c + 2w:修改两个词v + movement:可视化选择一段文本
13.3.2、文本对象极其统一
iX 内部
aX 包含
例如:
| 文本对象 | 区域 |
|---|---|
iw |
当前单词内容 |
aw |
当前单词 + 空格 |
i" |
引号内内容 |
a" |
引号 + 内容 |
ip |
当前段落 |
i( |
括号内 |
只要记住 i 和 a,整个世界都打开了。
13.3.3、所有问题的逃生方式都是 ESC
- 模式不明 →
ESC - 选择错了 →
ESC - 想中断命令 →
ESC
13.4、如何安全、系统地学习 Vim?(学习路线建议)
为避免陷入模式混乱或命令爆炸,建议采用如下学习路径:
阶段 1:熟悉三种模式
- Normal
- Insert
- Visual
每天练习模式切换与基本移动。
阶段 2:掌握高频操作命令
- 删除:
d - 修改:
c - 复制:
y - 粘贴:
p - 回退:
u - 快速移动:
w,b,$,0,gg
阶段 3:学习文本对象
iw,aw,i(,i",ip
这是 Vim 真正的威力所在。
阶段 4:掌握搜索与替换
/xxx:%s/old/new/g
阶段 5:分屏、多文件协作
:vspCtrl+w+h/j/k/l
阶段 6:开始写自己的 .vimrc
从简单开始,不要一口气写几十行。
阶段 7:逐步使用插件
只关注你真正需要提升的点。
13.5、小结
本章系统总结了 Vim 新手最常遇到的难点,包括:
- 模式切换理解困难
- 无法退出 Vim
- 命令体系看起来复杂
- 分屏文件编辑不熟练
- 插件选择困难
- 文本对象、Normal 模式理解不深
同时也给出了常见坑的最佳解决方法、学习路线与记忆技巧。
Vim 的本质不是难,而是与普通编辑器的理念完全不同。
一旦掌握模式化编辑思想,你就能真正体会 Vim 的高效与优雅。
14、高级阅读与扩展学习
当你完成本指南并能够熟练使用 Vim 进行日常编辑后,你就已经跨过了 "入门门槛"。但 Vim 的世界远不止于此。作为一个拥有 40 多年历史、无数高手贡献的文本编辑器,它的功能体系深如海洋。为了继续扩展你的编辑能力,本章将系统介绍 Vim 的进阶学习路径、经典资料、插件生态方向、提升效率的最佳实践,以及最终迈向 Vim 高手所应掌握的核心思想。
这一章节不仅适合继续钻研 Vim,也适用于未来学习 Neovim ------ Vim 的进化版。
14.1、Vim 官方文档与内置帮助系统(最高质量资料)
Vim 最权威、最全面的资料就是它的内置帮助系统。
你可能没有意识到:
Vim 的帮助文档质量极高,甚至高于大部分教程书籍。
你随时可以在 Vim 中输入:
:help
推荐几个最重要的帮助入口:
| 内容 | 命令 |
|---|---|
| Vim 入门(官方教程) | :help user-manual |
| 基础键位列表 | :help quickref |
| 正则表达式 | :help regex |
| 命令行模式 | :help cmdline |
| 插件编写 | :help write-plugin |
| Vim 脚本语言 | :help eval |
| 自动命令 | :help autocmd |
| 映射键位(map) | :help map |
建议你每天花 5 分钟读一点 help,长期积累会带来巨大收益。
14.2、官方教程:vimtutor(最适合新手的互动教程)
如果你还没有运行过 vimtutor,那你一定要试一次。
命令:
vimtutor
特点:
- 交互式教学
- 每一节都有操作练习
- 只需 20-30 分钟
- 是 Vim 官方为初学者设计的唯一教程
即使你已经会用 Vim,重新做一遍也有帮助。
14.3、推荐阅读书籍(体系化进阶)
以下书籍被视为 Vim 学习领域的"四大经典":
14.3.1、Practical Vim(Vim 实用技巧)
作者:Drew Neil
特点:
- 强调高效编辑思想
- 每条技巧独立成章
- 非常适合从中级 → 高级的跃迁
这是许多 Vim 高手的必读书。
14.3.2、Learning Vimscript the Hard Way
网址:
https://learnvimscriptthehardway.stevelosh.com/
特点:
- 经典 Vim 脚本语言入门书
- 适合想编写插件或自定义脚本的用户
看完这本,你已经能写自己的插件了。
14.3.3、Modern Vim(深度讲解 Vim 现代化用法)
偏向 Neovim 生态,但大量内容通用。
包含:
- 新的插件管理方式
- 异步能力
- LSP 集成思想
适合未来计划迁移到 Neovim 的用户。
14.3.4、Vim 力量(Vim Power)
一本更贴近中文读者的系统化教程,适合作为长期阅读参考。
14.4、深入 Vim 核心:Vimscript、映射、自动化
当你掌握基础操作后,建议进入 Vim 的 "可编程性" 世界。
14.4.1、学习 Vimscript(Vim 专用脚本语言)
Vimscript 是 Vim 的灵魂,它允许你:
- 编写自动化命令
- 创建自定义函数
- 开发插件
- 修改编辑行为
- 增强高效操作
入门入口:
:help user-functions
:help eval
:help write-plugin
进阶目标:
- 用 Vimscript 写一个自定义命令
- 给自己开发一个小插件
- 使用 autocommand 自动完成任务
14.4.2、熟练使用映射(map)提高效率
映射的目标是 把一串长命令变成一个按键。
例如:
nnoremap <leader>w :w<CR>
学习映射必须掌握:
nnoremapinoremapvnoremap<leader>键(默认\)
映射本质是构建你自己的键盘体系。
14.4.3、学会自动命令(autocmd)
自动命令可以让 Vim 在事件发生时自动执行某些操作。
例如:
autocmd BufWritePost *.c :!gcc %
或:
自动格式化:
autocmd BufWritePre * :%s/\s\+$//e
当你开始使用 autocommand,你的 Vim 就开始真正"自动化"。
14.5 、插件生态的专业级探索
初学者不需要太多插件,但进一步学习插件体系能极大提高效率。
14.5.1、Neovim:现代 Vim 的未来方向
Neovim 是 Vim 的分支,提供:
- 原生支持异步
- 原生 LSP(Language Server Protocol)
- 更现代的插件生态
- Lua 配置(更强大、更快)
如果你未来要做 C++/Python/Go 开发,Neovim + LSP 是最强组合。
14.5.2、高级插件推荐(中高级必备)
下面是中高级用户常装的插件方向:
(1)导航与搜索
fzf.vimtelescope.nvim(Neovim 用户)
(2)LSP 与 IDE 功能
coc.nvimnvim-lspconfig(Neovim 原生 LSP)nvim-cmp(自动补全框架)
(3)语法高亮与代码解析
treesitter(Neovim 专属)
树状解析器让语法高亮、选择文本更加智能。
(4)Git 集成
vim-fugitive(被称为 "Vim 中的 Git 神器")
(5)增强编辑功能
surround.vim:增删/修改括号、引号神器commentary.vim:快速注释repeat.vim:让.命令更强大
14.5.3、深入学习插件编写
学习插件编写需要掌握:
- Vimscript(或 Lua)
- Vim 运行时结构
- autoload 机制
- 映射体系
- 文本对象扩展
如果未来你想做 Vim 插件开发,可以挑战:
写一个自己的 Text Object 插件
例如为 Markdown 创建:
aih # a heading
iih # inner heading text
这是 Vim 高手的终极路线之一。
14.6、终极技巧:掌握 "Vim 思维"
无论你使用多少插件、读了多少教程,真正决定你 Vim 水平的是你的 编辑思维是否模式化与结构化。
所谓"Vim 思维"包括:
14.6.1、命令是组合的,不是记忆的
操作 + 文本对象
操作 + 移动
数字 + 命令
掌握这种思维后,你不用记"dw""d$""ci(",你只要理解 "语法"。
14.6.2、永远优先使用 Normal 操作,而不是 Insert 模式中狂按方向键
绝大多数新手停在 "把 Vim 当记事本" 的阶段,是因为只会用 Insert 模式。
14.6.3、用最小按键实现最大功能
熟练之后你会开始审视自己的按键路径,并不断优化:
- 映射
- 自动命令
- 插件
- 文本对象
- 缩短命令链
Vim 是一个 持续优化自己的过程。
14.7、扩展阅读资源(精选高质量链接)
以下资源质量很高,值得长期关注:
官方
- Vim 官网
- 《Vim User Manual》
- 《Vim reference manual》(非常全面)
社区教程
- Open Vim(交互式在线学习):https://www.openvim.com
- Vim Adventures(游戏化学习):https://vim-adventures.com
插件生态
- Awesome Neovim(精选 Neovim 插件列表)
- VimAwesome(插件索引网站)
14.8、小结
本章提供了 Vim 的 全维度进阶学习路线 :
从官方文档、书籍,到脚本语言、插件生态,再到现代 Neovim 技术栈,内容完整而深入。
最终目标是帮助你:
- 超越 "会用 Vim"
- 成为能自主配置、自主优化
- 甚至能写插件的高级用户
当你进入这些领域,你会发现 Vim 是一个巨大的世界,它不仅仅是一个编辑器,更是一套思维方式、一种效率哲学。