目录
[一、初识 Vim ------ Linux 下高效文本编辑器](#一、初识 Vim —— Linux 下高效文本编辑器)
[1.1 什么是 Vim](#1.1 什么是 Vim)
[1.2 Vim 与 Vi 的区别](#1.2 Vim 与 Vi 的区别)
[1.3 vim的安装](#1.3 vim的安装)
[1.3.1 CentOS系统](#1.3.1 CentOS系统)
[1.3.2 Ubuntu系统](#1.3.2 Ubuntu系统)
[二、Vim 常用命令与编辑操作](#二、Vim 常用命令与编辑操作)
[2.1 Vim 的常用模式](#2.1 Vim 的常用模式)
[2.1.1 普通模式](#2.1.1 普通模式)
[2.1.2 插入模式](#2.1.2 插入模式)
[2.1.3 命令行模式](#2.1.3 命令行模式)
[2.1.4 模式切换关系](#2.1.4 模式切换关系)
[2.2 文件打开与基础编辑](#2.2 文件打开与基础编辑)
[2.2.1 打开文件并跳转到指定行](#2.2.1 打开文件并跳转到指定行)
[2.2.2 输入文本内容](#2.2.2 输入文本内容)
[2.3 保存与退出命令](#2.3 保存与退出命令)
[2.4 光标移动命令](#2.4 光标移动命令)
[2.4.1 基础移动](#2.4.1 基础移动)
[2.4.2 行内移动](#2.4.2 行内移动)
[2.4.3 文件范围移动](#2.4.3 文件范围移动)
[2.5 删除、复制与粘贴](#2.5 删除、复制与粘贴)
[2.5.1 删除命令](#2.5.1 删除命令)
[2.5.2 复制命令](#2.5.2 复制命令)
[2.5.3 粘贴命令](#2.5.3 粘贴命令)
[2.6 撤销与恢复](#2.6 撤销与恢复)
[2.7 查找与替换](#2.7 查找与替换)
[2.7.1 查找内容](#2.7.1 查找内容)
[2.7.2 替换内容](#2.7.2 替换内容)
[2.8 可视化模式](#2.8 可视化模式)
[2.9 多文件与分屏操作](#2.9 多文件与分屏操作)
[2.9.1 多文件编辑](#2.9.1 多文件编辑)
[2.9.2 分屏编辑](#2.9.2 分屏编辑)
[2.10 Vim 常用命令速查](#2.10 Vim 常用命令速查)
[三、Vim 基础配置与使用优化](#三、Vim 基础配置与使用优化)
[3.1 Vim 配置文件说明](#3.1 Vim 配置文件说明)
[3.2 编辑用户级 Vim 配置文件](#3.2 编辑用户级 Vim 配置文件)
[3.3 常用配置项说明](#3.3 常用配置项说明)
[3.3.1 行号显示](#3.3.1 行号显示)
[3.3.2 语法高亮](#3.3.2 语法高亮)
[3.3.3 缩进相关配置](#3.3.3 缩进相关配置)
[3.3.4 搜索优化](#3.3.4 搜索优化)
[3.3.5 编码配置](#3.3.5 编码配置)
[3.3.6 光标和状态显示](#3.3.6 光标和状态显示)
[3.3.7 备份与撤销文件](#3.3.7 备份与撤销文件)
[3.4 创建备份和撤销目录](#3.4 创建备份和撤销目录)
[3.5 让配置生效](#3.5 让配置生效)
[3.6 验证配置效果](#3.6 验证配置效果)
[3.7 一份简洁版 Vim 配置推荐](#3.7 一份简洁版 Vim 配置推荐)
[四、Vim 插件扩展与效率提升](#四、Vim 插件扩展与效率提升)
[4.1 VimForCpp:一键式 C/C++ Vim 环境](#4.1 VimForCpp:一键式 C/C++ Vim 环境)
[4.1.1 VimForCpp 适合什么场景?](#4.1.1 VimForCpp 适合什么场景?)
[4.1.2 安装方式](#4.1.2 安装方式)
[4.1.3 VimForCpp 的功能特点](#4.1.3 VimForCpp 的功能特点)
[4.1.4 使用时需要注意的问题](#4.1.4 使用时需要注意的问题)
一、初识 Vim ------ Linux 下高效文本编辑器
在 Linux 运维、服务器管理以及开发工作中,文本编辑器是每天都会接触的重要工具。而在众多编辑器中,Vim 凭借轻量、高效、可扩展等特点,长期占据着开发者常用工具的重要位置。
很多初学者第一次接触 Vim 时,都会被它复杂的操作方式"劝退"。但实际上,当你真正理解它的工作模式与编辑逻辑后,会发现 Vim 在代码编写、配置文件修改以及远程服务器维护等场景中拥有极高的效率。
1.1 什么是 Vim
Vim 是 Unix/Linux 平台中非常经典的文本编辑器,它是在 Vi 编辑器基础上发展而来的增强版本。
相比传统文本编辑器,Vim 更强调:
- 键盘操作效率
- 模式化编辑
- 命令驱动
- 高度可定制化
它不仅可以完成普通文本编辑,还广泛用于:
- 程序代码编写
- Shell 脚本开发
- Linux 配置文件修改
- 远程服务器维护
- 日志查看与处理
对于 Linux 工程师来说,掌握 Vim 基本已经成为一项"基础技能"。
1.2 Vim 与 Vi 的区别
很多新手会把 Vi 和 Vim 当成同一个工具,但实际上:
Vi是 Unix 早期自带的文本编辑器Vim的全称是 Vi IMproved(Vi Improved),即"增强版 Vi"
Vim 在保留 Vi 原有操作方式的基础上,增加了大量现代化功能。
Vim 相比 Vi 的增强点如下:
1)语法高亮支持
Vim 能够识别多种编程语言,并自动进行关键字高亮显示,提高代码可读性。
支持示例:C / C++、Python、Java、Shell、Go、YAML、JSON 等
2)支持多级撤销
Vi 的撤销能力较弱,而 Vim 支持多次撤销与恢复操作:
bashu # 撤销 Ctrl+r # 恢复这对于开发调试非常实用。
3)支持插件扩展
Vim 拥有丰富的插件生态,可以扩展:文件树、Git 管理、自动补全、代码格式化、主题美化、LSP 智能提示
例如:NERDTree、vim-airline、coc.nvim
4)支持跨平台运行
Vim 不仅存在于 Linux 中,还支持:Windows、macOS、BSD、WSL
因此很多开发者会统一使用 Vim 作为日常编辑工具。
1.3 vim的安装
在实际使用中,Linux 系统通常默认安装 Vi,而 Vim 可能需要手动安装。以 CentOS 和 Ubuntu 系统为例,安装命令如下:
1.3.1 CentOS系统
在CentOS系统中安装vim编辑器的命令如下:
bash
sudo yum install -y vim
安装成功的输出如下:
bash
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package vim-enhanced.x86_64 2:7.4.629-8.el7_9 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:7.4.629-8.el7_9 updates 1.0 M
Transaction Summary
================================================================================
Install 1 Package
Total download size: 1.0 M
Installed size: 2.9 M
Downloading packages:
vim-enhanced-7.4.629-8.el7_9.x86_64.rpm | 1.0 MB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : 2:vim-enhanced-7.4.629-8.el7_9.x86_64 1/1
Verifying : 2:vim-enhanced-7.4.629-8.el7_9.x86_64 1/1
Installed:
vim-enhanced.x86_64 2:7.4.629-8.el7_9
Complete!
1.3.2 Ubuntu系统
在Ubuntu系统中安装vim编辑器的命令如下:
bash
sudo apt install -y vim
安装成功的输出如下:
bash
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
vim-common vim-runtime xxd
Suggested packages:
ctags vim-doc vim-scripts
The following NEW packages will be installed:
vim vim-common vim-runtime xxd
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 6,212 kB of archives.
After this operation, 30.1 MB of additional disk space will be used.
Get:1 http://mirrors.aliyun.com/ubuntu focal/main amd64 xxd amd64 2:8.1.2269-1ubuntu5 [37.5 kB]
Get:2 http://mirrors.aliyun.com/ubuntu focal/main amd64 vim-common amd64 2:8.1.2269-1ubuntu5 [164 kB]
Get:3 http://mirrors.aliyun.com/ubuntu focal/main amd64 vim-runtime all 2:8.1.2269-1ubuntu5 [5,490 kB]
Get:4 http://mirrors.aliyun.com/ubuntu focal/main amd64 vim amd64 2:8.1.2269-1ubuntu5 [520 kB]
Fetched 6,212 kB in 2s (3,106 kB/s)
Selecting previously unselected package xxd.
(Reading database ... 125532 files and directories currently installed.)
Preparing to unpack .../xxd_2%3a8.1.2269-1ubuntu5_amd64.deb ...
Unpacking xxd (2:8.1.2269-1ubuntu5) ...
Selecting previously unselected package vim-common.
Preparing to unpack .../vim-common_2%3a8.1.2269-1ubuntu5_amd64.deb ...
Unpacking vim-common (2:8.1.2269-1ubuntu5) ...
Selecting previously unselected package vim-runtime.
Preparing to unpack .../vim-runtime_2%3a8.1.2269-1ubuntu5_all.deb ...
Adding 'diversion of /usr/share/vim/vim81/doc/help.txt to /usr/share/vim/vim81/doc/help.txt.vim-tiny by vim-runtime'
Adding 'diversion of /usr/share/vim/vim81/doc/tags to /usr/share/vim/vim81/doc/tags.vim-tiny by vim-runtime'
Unpacking vim-runtime (2:8.1.2269-1ubuntu5) ...
Selecting previously unselected package vim.
Preparing to unpack .../vim_2%3a8.1.2269-1ubuntu5_amd64.deb ...
Unpacking vim (2:8.1.2269-1ubuntu5) ...
Setting up xxd (2:8.1.2269-1ubuntu5) ...
Setting up vim-common (2:8.1.2269-1ubuntu5) ...
Setting up vim-runtime (2:8.1.2269-1ubuntu5) ...
Setting up vim (2:8.1.2269-1ubuntu5) ...
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
Processing triggers for man-db (2.9.1-1) ...
安装完成后,可通过以下命令验证 Vim 版本:
bash
vim --version
二、Vim 常用命令与编辑操作
Vim 和普通文本编辑器最大的区别在于:它不是单纯依赖鼠标和菜单完成编辑,而是通过模式切换 + 命令组合来操作文本。
初学 Vim 时,很多人会遇到两个问题:
一是打开文件后不知道为什么不能直接输入内容;二是不知道如何保存退出。其实这两个问题都和 Vim 的模式机制有关。
掌握 Vim 命令之前,首先要明白 Vim 常用的几种工作模式。
2.1 Vim 的常用模式
Vim 最常用的模式主要有三种:
| 模式 | 作用 | 常见操作 |
|---|---|---|
| 普通模式 | Vim 默认进入的模式,用于执行命令 | 移动光标、删除、复制、粘贴、撤销 |
| 插入模式 | 用于输入文本内容 | 编写、修改文件内容 |
| 命令行模式 | 用于执行以 : 开头的命令 |
保存、退出、查找替换、跳转等 |
打开文件后,Vim 默认处于普通模式。此时按键并不会直接输入到文件中,而是会被 Vim 当作命令执行。
例如按下 j,不是输入字母 j,而是让光标向下移动一行。
2.1.1 普通模式
普通模式也可以理解为 Vim 的"控制模式"。在这个模式下,可以完成大量编辑操作,例如:
-
移动光标;
-
删除字符或整行;
-
复制和粘贴;
-
撤销和恢复;
-
查找文本;
-
跳转到指定行;
-
切换到插入模式或命令行模式。
当你不确定当前处于什么模式时,可以按:
Esc
多数情况下,按 Esc 都可以回到普通模式。
2.1.2 插入模式
插入模式才是真正用来输入文本的模式。
在普通模式下,可以通过以下命令进入插入模式:
| 命令 | 作用 |
|---|---|
i |
在光标当前位置前插入 |
a |
在光标当前位置后插入 |
o |
在当前行下方新建一行并插入 |
I |
在当前行行首插入 |
A |
在当前行行尾插入 |
O |
在当前行上方新建一行并插入 |
进入插入模式后,Vim 底部通常会显示:
-- INSERT --
编辑完成后,按 Esc 返回普通模式。
2.1.3 命令行模式
命令行模式主要用于执行保存、退出、替换、设置等命令。
在普通模式下输入:
:
即可进入命令行模式。
例如:
:w
表示保存文件。
:q
表示退出 Vim。
命令执行完成后,一般会自动返回普通模式。
2.1.4 模式切换关系
Vim 的模式切换可以简单理解为:
打开 Vim
↓
普通模式
├── i / a / o / I / A / O → 插入模式
│ └── Esc → 普通模式
│
└── : → 命令行模式
└── 执行命令后返回普通模式

可以记住一句话:
Vim 默认是普通模式,写内容进入插入模式,保存退出进入命令行模式,迷路就按 Esc。
2.2 文件打开与基础编辑
Vim 打开文件的基本格式如下:
vim 文件名
例如打开一个已有文件:
vim test.c
如果 test.c 已经存在,Vim 会直接打开该文件。
如果文件不存在,Vim 会创建一个新的编辑缓冲区,但这个文件只有在保存后才会真正生成。
例如:
vim hello.txt
如果当前目录下没有 hello.txt,进入 Vim 后底部可能会显示:
"hello.txt" [New File]
这表示当前正在编辑一个新文件。
2.2.1 打开文件并跳转到指定行
有时文件比较长,我们可能希望打开文件后直接跳转到某一行,可以使用:
vim +行号 文件名
例如打开 test.c 并跳转到第 10 行:
vim +10 test.c
这个命令在排查编译报错、查看日志、修改配置文件时非常实用。
2.2.2 输入文本内容
进入文件后,默认处于普通模式,不能直接输入文字。
可以按:
i
进入插入模式,然后输入内容,例如:
Hello Vim! I love Linux!
This is my first Vim edit.
输入完成后,按:
Esc
回到普通模式。
完整流程可以理解为:
vim hello.txt
按 i 进入插入模式
输入文本内容
按 Esc 回到普通模式
输入 :wq 保存并退出
2.3 保存与退出命令
Vim 的保存和退出命令需要在命令行模式中执行。执行这些命令前,通常先按 Esc 回到普通模式,然后输入 :。
常见命令如下:
| 命令 | 作用 | 使用场景 |
|---|---|---|
:w |
保存文件 | 修改后暂时不退出 |
:q |
退出 Vim | 文件未修改时退出 |
:wq |
保存并退出 | 修改完成后退出 |
:x |
保存并退出 | 类似 :wq |
:q! |
强制退出,不保存修改 | 放弃本次修改 |
:w 文件名 |
另存为新文件 | 保存副本 |
例如保存当前文件:
:w
保存并退出:
:wq
不保存直接退出:
:q!
另存为一个新文件:
:w hello_backup.txt
如果文件被修改过,但直接执行:
:q
Vim 会提示文件已经被修改,不能直接退出。此时需要选择:
:wq
保存退出,或者使用:
:q!
放弃修改并退出。
2.4 光标移动命令
Vim 的高效之处,很大一部分来自普通模式下的光标移动命令。熟练使用这些命令后,可以减少方向键和鼠标的使用。
2.4.1 基础移动
普通模式下,使用下面四个键移动光标:
| 命令 | 作用 |
|---|---|
h |
向左移动一个字符 |
j |
向下移动一行 |
k |
向上移动一行 |
l |
向右移动一个字符 |
这四个键刚开始可能不习惯,但熟练之后会比方向键更高效,因为手指不用离开主键盘区。
2.4.2 行内移动
| 命令 | 作用 |
|---|---|
0 |
移动到当前行行首 |
^ |
移动到当前行第一个非空字符 |
$ |
移动到当前行行尾 |
w |
移动到下一个单词开头 |
e |
移动到当前或下一个单词结尾 |
b |
移动到上一个单词开头 |
例如:
0
跳到当前行行首。
$
跳到当前行行尾。
w
跳到下一个单词开头。
2.4.3 文件范围移动
| 命令 | 作用 |
|---|---|
gg |
跳转到文件第一行 |
G |
跳转到文件最后一行 |
行号G |
跳转到指定行 |
Ctrl + f |
向下翻一页 |
Ctrl + b |
向上翻一页 |
Ctrl + d |
向下翻半页 |
Ctrl + u |
向上翻半页 |
例如跳转到文件最后一行:
G
跳转到文件第一行:
gg
跳转到第 50 行:
50G
也可以在命令行模式下跳转到指定行:
:50
2.5 删除、复制与粘贴
Vim 中很多编辑操作都可以和光标移动命令组合使用。比如删除命令 d,既可以删除一行,也可以删除一个单词,还可以删除从当前位置到行尾的内容。
2.5.1 删除命令
常用删除命令如下:
| 命令 | 作用 |
|---|---|
x |
删除光标所在字符 |
X |
删除光标前一个字符 |
dd |
删除当前整行 |
ndd |
从当前行开始删除 n 行 |
D |
删除光标位置到行尾 |
dw |
删除一个单词 |
d$ |
删除光标位置到行尾 |
d0 |
删除光标位置到行首 |
例如删除当前行:
dd
删除当前行开始的 3 行:
3dd
删除一个单词:
dw
删除当前位置到行尾:
d$
需要注意的是,Vim 中删除的内容通常会进入寄存器,因此可以通过粘贴命令恢复出来。
2.5.2 复制命令
Vim 中复制操作通常叫做 yank,对应命令是 y。
| 命令 | 作用 |
|---|---|
yy |
复制当前整行 |
nyy |
从当前行开始复制 n 行 |
yw |
复制一个单词 |
y$ |
复制光标位置到行尾 |
y0 |
复制光标位置到行首 |
例如复制当前行:
yy
复制 5 行:
5yy
复制当前位置到行尾:
y$
2.5.3 粘贴命令
| 命令 | 作用 |
|---|---|
p(小写) |
粘贴到光标后,或当前行下方 |
P(大写) |
粘贴到光标前,或当前行上方 |
例如复制当前行并粘贴到下一行:
yy
p
删除当前行并移动到其他位置:
dd
移动光标到目标位置
p
这种写法相当于剪切并粘贴。
2.6 撤销与恢复
在编辑文件时,误操作很常见。Vim 提供了撤销和恢复命令。
| 命令 | 作用 |
|---|---|
u |
撤销上一步操作 |
Ctrl + r |
恢复刚才撤销的操作 |
例如误删了一行,可以在普通模式下按:
u
恢复刚才的删除。
如果撤销后又想恢复原来的修改,可以按:
Ctrl + r
这两个命令在实际编辑中非常常用,尤其是在批量删除、替换文本时,可以快速修正误操作。
2.7 查找与替换
Vim 支持快速查找文件中的内容,也可以批量替换文本。
2.7.1 查找内容
| 命令 | 作用 |
|---|---|
/关键字 |
从当前位置向后查找 |
?关键字 |
从当前位置向前查找 |
n |
跳转到下一个匹配项 |
N |
跳转到上一个匹配项 |
例如查找 main:
/main
向前查找 error:
?error
查找到内容后,按:
n
继续跳转到下一个匹配项。
按:
N
跳转到上一个匹配项。
2.7.2 替换内容
替换命令一般在命令行模式中使用。
替换当前行第一个匹配项:
:s/old/new/
替换当前行所有匹配项:
:s/old/new/g
替换全文所有匹配项:
:%s/old/new/g
替换全文并逐个确认:
:%s/old/new/gc
参数含义:
| 参数 | 说明 |
|---|---|
% |
表示整个文件 |
s |
substitute,表示替换 |
g |
替换当前范围内所有匹配项 |
c |
confirm,替换前逐个确认 |
例如将全文中的 hello 替换为 hi:
:%s/hello/hi/g
如果担心误替换,可以使用确认模式:
:%s/hello/hi/gc
这样每次替换前 Vim 都会询问是否确认。
2.8 可视化模式
可视化模式用于选择文本,然后对选中的内容执行删除、复制、缩进等操作。
进入可视化模式的命令如下:
| 命令 | 作用 |
|---|---|
v |
按字符选择 |
V |
按行选择 |
Ctrl + v |
按块选择 |
进入可视化模式后,可以通过 h/j/k/l 或其他移动命令扩大选区。
选中文本后,可以执行:
| 命令 | 作用 |
|---|---|
d |
删除选中内容 |
y |
复制选中内容 |
> |
向右缩进 |
< |
向左缩进 |
例如按行选择多行并删除:
V
移动光标选择多行
d
按行选择多行并复制:
V
移动光标选择多行
y
块选择模式适合批量编辑列内容,比如给多行代码前面统一添加注释。
图片占位:Vim 可视化模式选择文本示意图
2.9 多文件与分屏操作
在实际编辑中,经常需要同时查看多个文件,比如一边看配置文件,一边看日志文件。Vim 支持多文件编辑和分屏操作。
2.9.1 多文件编辑
一次打开多个文件:
vim file1.txt file2.txt
常用切换命令:
| 命令 | 作用 |
|---|---|
:n |
切换到下一个文件 |
:N |
切换到上一个文件 |
:files |
查看当前打开的文件列表 |
:e 文件名 |
打开另一个文件 |
例如在 Vim 中打开另一个文件:
:e test2.txt
查看当前文件列表:
:files
2.9.2 分屏编辑
水平分屏打开文件:
:sp 文件名
垂直分屏打开文件:
:vsp 文件名
例如:
:vsp config.txt
表示垂直分屏打开 config.txt。
常用窗口切换命令:
| 命令 | 作用 |
|---|---|
Ctrl + w + w |
在多个窗口之间切换 |
Ctrl + w + h |
切换到左侧窗口 |
Ctrl + w + l |
切换到右侧窗口 |
Ctrl + w + j |
切换到下方窗口 |
Ctrl + w + k |
切换到上方窗口 |
:q |
关闭当前窗口 |
分屏操作适合对比文件、同时修改多个配置文件、查看日志和代码等场景。
2.10 Vim 常用命令速查
为了方便记忆,可以把常用命令整理成下面这张表。
| 功能 | 命令 |
|---|---|
| 打开文件 | vim 文件名 |
| 进入插入模式 | i、a、o |
| 返回普通模式 | Esc |
| 保存文件 | :w |
| 退出 Vim | :q |
| 保存并退出 | :wq |
| 强制退出不保存 | :q! |
| 光标移动 | h/j/k/l |
| 跳转文件开头 | gg |
| 跳转文件末尾 | G |
| 跳转指定行 | 行号G |
| 删除字符 | x |
| 删除整行 | dd |
| 复制整行 | yy |
| 粘贴 | p |
| 撤销 | u |
| 恢复撤销 | Ctrl + r |
| 查找 | /关键字 |
| 全文替换 | :%s/old/new/g |
| 可视化选择 | v、V、Ctrl + v |
| 水平分屏 | :sp 文件名 |
| 垂直分屏 | :vsp 文件名 |
对于初学者来说,不需要一开始就记住所有命令。可以先掌握下面这几个核心操作:
i 进入插入模式
Esc 返回普通模式
:wq 保存并退出
:q! 不保存退出
h/j/k/l 移动光标
dd 删除整行
yy 复制整行
p 粘贴
u 撤销
/关键词 查找内容
等这些基础命令熟练之后,再继续学习分屏、多文件编辑、批量替换等操作,Vim 的使用效率就会明显提升。
三、Vim 基础配置与使用优化
前面已经介绍了 Vim 的常用命令和基本编辑操作。掌握这些命令后,已经可以完成大部分文件编辑工作。不过,默认状态下的 Vim 使用体验比较基础,比如没有显示行号、缩进不够直观、搜索结果不高亮、编辑代码时缺少语法颜色等。
为了让 Vim 更适合日常开发和配置文件编辑,我们可以通过配置文件对 Vim 的编辑环境进行调整。常见的配置包括:显示行号、开启语法高亮、设置缩进规则、优化搜索体验、启用鼠标支持、配置文件编码等。
3.1 Vim 配置文件说明
Vim 的配置可以分为系统级配置 和用户级配置。
系统级配置文件通常是:
/etc/vimrc
这个文件对所有用户生效,但修改它一般需要 root 权限。如果服务器上有多个用户,不建议随意修改系统级配置,否则可能影响其他用户的使用习惯。
用户级配置文件通常是:
~/.vimrc
这个文件只对当前用户生效。如果文件不存在,可以手动创建。实际使用中,更推荐修改用户级配置文件,因为它不会影响系统中的其他用户。
两者区别可以简单理解为:
| 配置文件 | 生效范围 | 是否推荐修改 |
|---|---|---|
/etc/vimrc |
所有用户 | 不建议随意修改 |
~/.vimrc |
当前用户 | 推荐使用 |
因此,后续配置都以 ~/.vimrc 为例。
3.2 编辑用户级 Vim 配置文件
打开当前用户的 Vim 配置文件:
vim ~/.vimrc
如果该文件不存在,Vim 会自动创建一个新的编辑缓冲区。保存退出后,~/.vimrc 文件才会真正生成。
可以在文件中加入下面这些基础配置:
" 显示行号
set number
" 显示相对行号
set relativenumber
" 开启语法高亮
syntax on
" 开启自动缩进
set autoindent
" 开启智能缩进
set smartindent
" 设置 Tab 宽度为 4 个空格
set tabstop=4
" 设置缩进宽度为 4 个空格
set shiftwidth=4
" 将 Tab 转换为空格
set expandtab
" 设置软 Tab 宽度
set softtabstop=4
" 搜索结果高亮显示
set hlsearch
" 搜索时实时匹配
set incsearch
" 搜索时忽略大小写
set ignorecase
" 智能大小写匹配
set smartcase
" 自动换行显示
set wrap
" 按单词边界换行
set linebreak
" 光标距离窗口底部或顶部保留 5 行
set scrolloff=5
" 启用鼠标支持
set mouse=a
" 设置 Vim 内部编码
set encoding=utf-8
" 设置文件保存编码
set fileencoding=utf-8
" 显示当前模式
set showmode
" 显示正在输入的命令
set showcmd
" 显示光标所在行列信息
set ruler
" 命令行补全菜单
set wildmenu
" 高亮当前行
set cursorline
" 高亮当前列
set cursorcolumn
" 开启备份文件
set backup
" 指定备份文件目录
set backupdir=~/.vim/backup/
" 开启撤销文件
set undofile
" 指定撤销文件目录
set undodir=~/.vim/undo/
这些配置不需要一次性全部使用,可以根据自己的习惯进行删减。比如如果不喜欢当前列高亮,可以去掉:
set cursorcolumn
如果觉得相对行号不习惯,也可以删除:
set relativenumber
3.3 常用配置项说明
为了方便理解,下面对几个常见配置项做简单说明。
3.3.1 行号显示
set number
该配置用于显示每一行的行号。写代码、查看报错行、跳转指定行时非常方便。
set relativenumber
相对行号会以当前光标所在行为基准,显示其他行与当前行的距离。这个功能适合配合 5j、10k 这类跳转命令使用。
如果刚开始不习惯,可以只保留普通行号:
set number
3.3.2 语法高亮
syntax on
开启语法高亮后,Vim 会根据文件类型对关键字、字符串、注释等内容进行颜色区分。
例如编辑 C、Shell、Python、Java 等文件时,语法高亮可以明显提升代码可读性。
3.3.3 缩进相关配置
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab
set softtabstop=4
这几项通常一起使用。
含义如下:
| 配置项 | 作用 |
|---|---|
autoindent |
新行自动继承上一行缩进 |
smartindent |
根据代码结构进行智能缩进 |
tabstop=4 |
一个 Tab 显示为 4 个空格宽度 |
shiftwidth=4 |
自动缩进时使用 4 个空格 |
expandtab |
输入 Tab 时转换为空格 |
softtabstop=4 |
按 Tab 键时表现为 4 个空格 |
对于写代码来说,统一缩进非常重要。尤其是在 Python、YAML 等对缩进敏感的文件中,建议尽量使用空格代替 Tab,避免出现格式问题。
3.3.4 搜索优化
set hlsearch
set incsearch
set ignorecase
set smartcase
这些配置主要用于优化搜索体验。
| 配置项 | 作用 |
|---|---|
hlsearch |
高亮显示所有搜索结果 |
incsearch |
输入搜索内容时实时匹配 |
ignorecase |
搜索时默认忽略大小写 |
smartcase |
搜索内容包含大写字母时自动区分大小写 |
例如使用:
/hello
搜索时,Vim 会高亮所有匹配的 hello。如果不想继续显示高亮,可以在 Vim 中执行:
:nohlsearch
3.3.5 编码配置
set encoding=utf-8
set fileencoding=utf-8
这两个配置用于设置 Vim 的字符编码。
encoding 表示 Vim 内部使用的编码,fileencoding 表示文件保存时使用的编码。一般情况下,设置为 UTF-8 可以减少中文乱码问题。
如果经常编辑从 Windows 传过来的文件,也可以配置多编码识别:
set fileencodings=utf-8,gbk,gb2312,latin1
这样 Vim 会尝试按照多个编码顺序识别文件内容。
3.3.6 光标和状态显示
set showmode
set showcmd
set ruler
set cursorline
set cursorcolumn
这些配置主要用于增强编辑时的可视化反馈。
| 配置项 | 说明 |
|---|---|
showmode |
显示当前所处模式 |
showcmd |
显示正在输入的命令 |
ruler |
显示光标所在行列信息 |
cursorline |
高亮当前行 |
cursorcolumn |
高亮当前列 |
其中 cursorline 比较实用,可以帮助我们快速定位当前光标所在行。cursorcolumn 有些人会觉得影响视觉体验,可以根据个人习惯决定是否开启。
3.3.7 备份与撤销文件
set backup
set backupdir=~/.vim/backup/
set undofile
set undodir=~/.vim/undo/
这几项配置用于增强文件安全性和撤销能力。
backup 表示开启备份文件,backupdir 用于指定备份文件存放目录。
undofile 表示开启持久化撤销。默认情况下,关闭 Vim 后撤销历史会消失;开启该配置后,即使重新打开文件,也可以继续撤销之前的修改记录。
不过需要注意,配置中指定的目录必须存在,否则 Vim 可能会提示目录不存在。
3.4 创建备份和撤销目录
如果 .vimrc 中配置了:
set backupdir=~/.vim/backup/
set undodir=~/.vim/undo/
就需要提前创建对应目录:
mkdir -p ~/.vim/backup ~/.vim/undo
其中:
-
~/.vim/backup用于存放备份文件; -
~/.vim/undo用于存放持久化撤销记录。
建议在保存 .vimrc 后执行这个命令,避免 Vim 在使用过程中因为目录不存在而报错。
3.5 让配置生效
修改完 ~/.vimrc 后,可以通过两种方式让配置生效。
第一种方式是保存退出后重新打开 Vim:
:wq
然后重新进入 Vim:
vim test.c
第二种方式是不退出 Vim,直接重新加载配置文件:
:source ~/.vimrc
执行后,刚才修改的配置会立即生效。
如果配置写错,Vim 可能会在加载时提示错误。这时可以根据提示中的行号回到 .vimrc 中检查对应配置。
3.6 验证配置效果
配置完成后,可以创建或打开一个 C 语言文件来测试效果:
vim test.c
进入文件后输入以下代码:
#include <stdio.h>
int main()
{
printf("Hello Vim config!\n");
if (1) {
printf("Indent test.\n");
}
return 0;
}
可以重点观察以下效果是否生效:
-
是否显示行号
每一行左侧应该显示对应行号。
-
是否开启语法高亮
#include、int、return、字符串等内容应该显示不同颜色。 -
缩进是否正常
在
{}中换行时,下一行应该自动缩进。 -
Tab 是否转换为空格
按下 Tab 后,缩进表现为多个空格,而不是实际 Tab 字符。
-
搜索是否高亮
在普通模式下输入:
/printf匹配到的
printf应该被高亮显示。 -
当前行是否高亮
如果配置了
cursorline,光标所在行会有明显高亮效果。
如果这些效果都能正常显示,说明基础配置已经生效。
3.7 一份简洁版 Vim 配置推荐
如果你不想一次写太多配置,可以先使用下面这份简洁版本:
" 基础显示
set number
syntax on
set ruler
set showcmd
set showmode
" 缩进设置
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
" 搜索设置
set hlsearch
set incsearch
set ignorecase
set smartcase
" 编辑体验
set cursorline
set mouse=a
set encoding=utf-8
set fileencoding=utf-8
这份配置覆盖了最常用的功能,适合刚开始学习 Vim 的用户使用。等后续熟悉 Vim 之后,再根据自己的习惯继续扩展配置。
四、Vim 插件扩展与效率提升
前面已经完成了 Vim 的基础命令和常用配置。对于日常修改配置文件、简单编辑代码来说,这些内容已经够用。不过如果想让 Vim 更接近一个轻量级 IDE,就需要借助插件来增强功能。
Vim 插件可以实现很多实用能力,例如文件树、代码补全、语法检查、代码片段、快速注释、状态栏美化等。本章主要介绍如何使用插件管理器安装插件,并通过几个常见插件提升 Vim 的编辑效率。
4.1 VimForCpp:一键式 C/C++ Vim 环境
如果只是想快速把 Vim 打造成适合 C/C++ 开发的编辑环境,可以了解一下 Gitee 上的 VimForCpp 项目。
VimForCpp 并不是单独某一个 Vim 插件,而是一个偏向"一键式安装"的 Vim 环境整合方案。它主要面向不熟悉 Vim 配置的新手用户,目标是快速搭建一个可用于 C/C++ 开发的终端 Vim 环境。项目说明中提到,它适合远程 SSH 连接 Linux 服务器进行开发,并且会整合安装 Vim 配置、插件以及部分依赖工具。(Gitee)
4.1.1 VimForCpp 适合什么场景?
VimForCpp 比较适合下面几类用户:
-
刚开始学习 Vim,不想手动配置太多插件;
-
主要使用 Vim 编写 C/C++ 代码;
-
经常通过 SSH 连接 Linux 服务器进行开发;
-
希望快速体验代码补全、文件浏览、语法检查、函数跳转等 IDE 功能;
-
想先使用现成方案,再慢慢理解 Vim 插件配置。
它的优势在于上手速度快,不需要从零开始配置 NERDTree、YouCompleteMe、ctags 等组件。对于刚接触 Vim 插件生态的用户来说,可以先通过这类整合项目感受 Vim 的扩展能力。
4.1.2 安装方式
VimForCpp 项目提供了一键安装脚本。常见安装方式如下:
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o /tmp/install.sh && bash /tmp/install.sh
执行该命令后,脚本会下载项目配置,并根据脚本逻辑安装相关依赖和 Vim 环境。
需要注意的是,这种安装方式会直接执行远程脚本,因此正式使用前建议先查看脚本内容,确认脚本操作符合自己的预期:
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o /tmp/install.sh
less /tmp/install.sh
确认无误后再执行:
bash /tmp/install.sh
这样比直接下载后立即执行更加稳妥。
4.1.3 VimForCpp 的功能特点
根据项目介绍和展示内容,VimForCpp 主要围绕 C/C++ 开发体验进行增强,包括:
文件目录浏览;
代码自动补全;
头文件补全;
语法诊断;
函数或变量跳转;
函数列表查看;
文件快速查找;
常用快捷键整合。
这些功能本质上也是通过多个 Vim 插件和外部工具组合实现的。相比自己逐个安装插件,VimForCpp 更像是把一套常见 C/C++ 开发配置提前打包好了。
4.1.4 使用时需要注意的问题
虽然 VimForCpp 安装方便,但也需要注意几个问题。
第一,它更适合快速体验,不一定适合所有环境 。项目介绍中提到其支持环境偏向 CentOS 7 x86_64,其他发行版可能需要自行适配。(Gitee)
第二,一键安装脚本可能会修改现有 Vim 配置 。如果你本机已经有自己的 .vimrc,建议提前备份:
cp ~/.vimrc ~/.vimrc.bak
第三,不要盲目执行不了解的远程脚本 。任何类似 curl ... | bash 的命令都应该谨慎使用,最好先下载脚本并查看内容,再决定是否执行。
第四,后续维护成本要考虑。一键式配置虽然省事,但如果后面想调整某个快捷键、替换某个插件,仍然需要理解它内部的配置结构。
如果你是刚入门 Vim,想快速看到 Vim 变成"类 IDE"的效果,可以尝试 VimForCpp。如果你希望长期维护自己的开发环境,更推荐逐步学习 Vim-Plug、.vimrc 和各类插件的配置方式。
总结
本文围绕 Vim 编辑器的使用与配置进行了系统整理,从 Vim 的基本概念、常用模式、文件编辑命令,到基础配置和插件扩展,逐步介绍了 Vim 的核心使用方法。
对于初学者来说,学习 Vim 最重要的是先理解它的模式切换机制 :普通模式负责执行命令,插入模式负责输入文本,命令行模式负责保存、退出、查找替换等操作。只要掌握了
i、Esc、:wq、:q!、dd、yy、p、u、/关键字等常用命令,就已经可以完成大部分日常编辑任务。在熟悉基础命令后,可以通过
.vimrc配置文件优化 Vim 的使用体验,例如显示行号、开启语法高亮、设置缩进规则、优化搜索效果等。进一步使用插件管理器和常见插件,还可以让 Vim 具备文件树、代码片段、语法检查、快速注释等更强大的功能。总的来说,Vim 的学习曲线虽然较陡,但它的编辑效率和可定制性非常强。建议大家先掌握基础操作,再逐步完善配置和插件,最终形成一套适合自己的 Vim 使用习惯。