《 Linux 修炼全景指南: 七 》 指尖下的利刃:深入理解 Vim 的高效世界

摘要

本篇《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 之所以看似 "反直觉",就是因为它包含多个不同的操作模式。

最核心的三种模式是:

  1. 普通模式(Normal Mode)
  2. 插入模式(Insert Mode)
  3. 命令模式(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 删除整行(剪切整行)
Dd$ 删除到行尾
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/

替换当前行第一个 oldnew

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)

如果系统安装了 rgag

复制代码
: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 中用于选择文本的一整套操作方式。当你进入可视化模式后,你可以通过移动光标来扩展或缩减选区,选中后可以进行:

  • 删除
  • 复制
  • 粘贴
  • 替换
  • 缩进
  • 格式化
  • 大小写转换
  • 多行批量操作
  • 列编辑(矩形选择)

可视模式提供了三种方式:

  1. 字符可视模式(Visual) ------ 逐字符选择(v
  2. 行可视模式(Visual Line) ------ 以行为单位选择(V
  3. 块可视模式(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 的光标移动(重点)

你可以在可视模式中使用所有普通模式的光标移动键:

  • h j k l
  • w b e:按单词移动
  • { }:按段落移动
  • 0 $:移到行首行尾
  • f{char}:移动到某字符下一个出现的位置
  • %:跳转括号配对
  • gg G:跳到文件开头/结尾

可视选区会随着光标移动实时更新,非常直观。

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 变慢、快捷键冲突、启动卡顿。

正确方式:

  1. 保持 10--20 个以内
  2. 每个插件解决一个明确问题
  3. .vimrc 中记录"这是干什么的"
  4. 不要装重复功能插件
  5. 学会删除插件(养成简洁习惯)

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.c
  • utils.c

任务目标如下:

  1. 打开 main.c
  2. 快速浏览代码结构
  3. 修改函数名称
  4. 搜索替换内部调用
  5. 使用分屏同时查看 utils.c
  6. 删除多余代码块
  7. 复制另一段代码并粘贴到正确位置
  8. 保存所有修改并退出

只需要 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.cutils.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、完整任务流程回顾(超高效率版)

你刚刚完成了一个常见的开发编辑流程:

  1. 打开文件
  2. 快速导航
  3. 修改函数名
  4. 全局搜索替换
  5. 分屏打开第二个文件
  6. 删除无用代码
  7. 复制另一个文件中的函数
  8. 粘贴到主文件
  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 模式开始输入命令:

  1. ESC
  2. :
  3. 输入退出命令

坑 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:分屏之后不知道怎么切换窗口、关闭窗口

新手常常会:

  • 切不了分屏
  • 误删不该删除的窗口
  • 找不到当前焦点在哪

记住窗口操作四件事

  1. 创建窗口

    :sp # 水平 split
    :vsp # 垂直 split

  2. 切换窗口

    Ctrl + w + h/j/k/l

  3. 关闭窗口

    :q

  4. 调整窗口大小

    Ctrl + w + <
    Ctrl + w + >
    Ctrl + w + =

坑 9:插件太多,Vim 变卡或冲突不断

常见错误:

  • 第一天装十几个插件
  • 装了相同功能的插件冲突
  • 装了插件却不会配置

建议

  • 初学者插件 不超过 3 个
    • vim-plug(插件管理器)
    • nerdtree(文件树)
    • vim-airline(状态栏优化)
  • 学会后再逐步增加,比如:
    • fzf.vim(模糊搜索)
    • coc.nvim(强大 IDE 功能)

记住:插件是提高生产力的,不是用来堆砌的。

坑 10:害怕使用 Normal 命令,只用 Insert 模式当普通编辑器

这是最大损失。

解决方案

逐步打破舒适区,建议学习路线:

  1. 熟练 Insert → Normal 切换(最关键)
  2. 学习单词级移动
  3. 学习基础删除/复制/修改命令
  4. 练习文本对象(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( 括号内

只要记住 ia,整个世界都打开了。

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:分屏、多文件协作

  • :vsp
  • Ctrl+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>

学习映射必须掌握:

  • nnoremap
  • inoremap
  • vnoremap
  • <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.vim
  • telescope.nvim(Neovim 用户)

(2)LSP 与 IDE 功能

  • coc.nvim
  • nvim-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》(非常全面)

社区教程

插件生态

  • Awesome Neovim(精选 Neovim 插件列表)
  • VimAwesome(插件索引网站)

14.8、小结

本章提供了 Vim 的 全维度进阶学习路线

从官方文档、书籍,到脚本语言、插件生态,再到现代 Neovim 技术栈,内容完整而深入。

最终目标是帮助你:

  • 超越 "会用 Vim"
  • 成为能自主配置、自主优化
  • 甚至能写插件的高级用户

当你进入这些领域,你会发现 Vim 是一个巨大的世界,它不仅仅是一个编辑器,更是一套思维方式、一种效率哲学。

相关推荐
sulikey3 小时前
Linux基础指令与权限管理深度解析:从入门到精通
linux·运维·服务器·ubuntu·centos·linux命令·linux权限
qq_2153978973 小时前
docker 安装 opengauss 高斯数据库
运维·docker·容器
s***46983 小时前
linux 设置tomcat开机启动
linux·运维·tomcat
xu_yule3 小时前
网络和Linux网络-3(套接字编程)TCP网络通信代码
linux·网络·tcp/ip
r***F2623 小时前
若依部署Nginx和Tomcat
运维·nginx·tomcat
周杰伦fans4 小时前
C# - Task 是什么?想象一下你在餐厅点餐
服务器·开发语言·c#
HalvmånEver5 小时前
Linux:进程的切换与调度(进程四)
linux·运维·服务器
运维有小邓@5 小时前
实时日志关联分析工具:智能检测潜在安全威胁
运维·网络·安全
谷隐凡二5 小时前
Docker 的核心理念及技术的简单说明
运维·docker·容器