Linux系统编程:(五)基础开发工具:vim编辑器的使用及其配置操作

目录

[一、初识 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 支持多次撤销与恢复操作:

bash 复制代码
u      # 撤销
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 文件名
进入插入模式 iao
返回普通模式 Esc
保存文件 :w
退出 Vim :q
保存并退出 :wq
强制退出不保存 :q!
光标移动 h/j/k/l
跳转文件开头 gg
跳转文件末尾 G
跳转指定行 行号G
删除字符 x
删除整行 dd
复制整行 yy
粘贴 p
撤销 u
恢复撤销 Ctrl + r
查找 /关键字
全文替换 :%s/old/new/g
可视化选择 vVCtrl + 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

相对行号会以当前光标所在行为基准,显示其他行与当前行的距离。这个功能适合配合 5j10k 这类跳转命令使用。

如果刚开始不习惯,可以只保留普通行号:

复制代码
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;
}

可以重点观察以下效果是否生效:

  1. 是否显示行号

    每一行左侧应该显示对应行号。

  2. 是否开启语法高亮
    #includeintreturn、字符串等内容应该显示不同颜色。

  3. 缩进是否正常

    {} 中换行时,下一行应该自动缩进。

  4. Tab 是否转换为空格

    按下 Tab 后,缩进表现为多个空格,而不是实际 Tab 字符。

  5. 搜索是否高亮

    在普通模式下输入:

    复制代码
    /printf

    匹配到的 printf 应该被高亮显示。

  6. 当前行是否高亮

    如果配置了 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 最重要的是先理解它的模式切换机制 :普通模式负责执行命令,插入模式负责输入文本,命令行模式负责保存、退出、查找替换等操作。只要掌握了 iEsc:wq:q!ddyypu/关键字 等常用命令,就已经可以完成大部分日常编辑任务。

在熟悉基础命令后,可以通过 .vimrc 配置文件优化 Vim 的使用体验,例如显示行号、开启语法高亮、设置缩进规则、优化搜索效果等。进一步使用插件管理器和常见插件,还可以让 Vim 具备文件树、代码片段、语法检查、快速注释等更强大的功能。

总的来说,Vim 的学习曲线虽然较陡,但它的编辑效率和可定制性非常强。建议大家先掌握基础操作,再逐步完善配置和插件,最终形成一套适合自己的 Vim 使用习惯。

相关推荐
lzhdim2 小时前
SQL 入门 14:SQL 触发器与事件:自动化数据处理
linux·前端·数据库·sql·自动化
脆皮炸鸡7552 小时前
库制作与原理~静态库&静态链接
linux·经验分享·笔记·学习方法
wangjialelele2 小时前
Linux SystemV 消息队列 + 责任链模式:实现客户端消息处理流水线
linux·服务器·c语言·网络·c++·责任链模式
|_⊙3 小时前
Linux 深入理解文件(Ext2文件系统:下)
linux·服务器·数据库
cui_ruicheng3 小时前
Linux网络编程(一):网络基础与协议概念
linux·网络·操作系统
dualven_in_csdn3 小时前
【网络】ip转发
linux·服务器·网络
恋奴娇3 小时前
ubuntu 25 gnome-screenshot 录屏启动失败 原因pipewire服务未启动
linux·运维·ubuntu
2601_956139423 小时前
江西VI设计品牌哪家强
vim
susu10830189113 小时前
windows系统的WSL的Ubuntu安装docker
linux·ubuntu·docker