目录
- 前言
- 一、Vim异常退出与Swap文件恢复机制
- 二、Linux用户权限管理与Sudo配置
-
- [2.1 普通用户的Sudo权限问题](#2.1 普通用户的Sudo权限问题)
- [2.2 配置Sudoers白名单](#2.2 配置Sudoers白名单)
- 三、Vim配置原理与一键化环境搭建
-
- [3.1 Vim很挫?那是因为你没配置!](#3.1 Vim很挫?那是因为你没配置!)
-
- [3.1.1 为什么现在不细讲手动配置了?](#3.1.1 为什么现在不细讲手动配置了?)
- [3.2 Vim 配置的核心原理](#3.2 Vim 配置的核心原理)
-
- [3.2.1 用户隔离机制(最佳实践)](#3.2.1 用户隔离机制(最佳实践))
- [3.2.2 基础配置项详解](#3.2.2 基础配置项详解)
- [3.3 进阶:一键化插件配置方案 (VimForCpp)](#3.3 进阶:一键化插件配置方案 (VimForCpp))
-
- [3.3.1 项目获取与安装](#3.3.1 项目获取与安装)
- [3.3.2 安装过程解析](#3.3.2 安装过程解析)
- [3.3.3 效果验证](#3.3.3 效果验证)
-
- [3.3.3.1 关于缩进的特别说明(Tab vs Space)](#3.3.3.1 关于缩进的特别说明(Tab vs Space))
- 结语


🎬 云泽Q :个人主页
🔥 专栏传送入口 : 《C语言》《数据结构》《C++》《Linux》《蓝桥杯系列》《笔试算法》《AI赋能》《STM32》
⛺️遇见安然遇见你,不负代码不负卿~
前言
大家好啊,我是云泽Q,欢迎阅读我的文章,一名热爱计算机技术的在校大学生,喜欢在课余时间做一些计算机技术的总结性文章,希望我的文章能为你解答困惑~
一、Vim异常退出与Swap文件恢复机制
在使用Vim的过程中,新手最容易遇到的恐慌时刻就是:突然断电、网络断开(SSH掉线)或者不小心关闭了终端窗口,导致正在编辑的文件没有保存。当你再次尝试打开该文件时,可能会看到一堆红色的警告信息。
【问题现象】
当你再次执行 vim code.c 时,屏幕可能会出现如下提示:
E325: ATTENTION
Found a swap file by the name ".code.c.swp"
owned by: root dated: Wed Jul 29 15:17:02 2026
...
Swap file ".code.c.swp" already exists!
Open Read-Only, (E)dit anyway, ®ecover, (D)elete it, (Q)uit, (A)bort:
这是因为Vim在编辑文件时,为了防止数据丢失,会在当前目录下生成一个隐藏的交换文件(Swap File),文件名通常为 .原文件名.swp(例如 .code.c.swp)。当Vim非正常退出时,这个文件会被保留下来。
【解决方案与操作步骤】
面对这个提示,我们需要根据情况选择对应的选项:
-
恢复数据(推荐) :
如果你是因为崩溃导致未保存,请选择 ®ecover 。Vim会尝试从
.swp文件中恢复你上次编辑的内容。-
恢复完成后,检查内容是否完整。
-
确认无误后,正常保存退出(
:wq)。 -
关键一步 :恢复并保存后,那个
.swp文件就变成了垃圾文件。你需要手动删除它,否则下次打开还会提示。可以使用命令:bashrm .code.c.swp或者在Vim内部使用
:!rm .code.c.swp。
-
-
直接删除Swap文件 :
如果你确定之前的修改都不想要了,或者已经通过其他方式恢复了,可以选择 (D)elete it。这会直接删除交换文件,让你干净地打开原文件。
-
查看隐藏文件 :
平时我们在目录下
ls是看不到.swp文件的,因为它是隐藏文件。如果你想确认它的存在,需要使用-a参数:bashls -al这样就能看到类似
-rw-r--r-- 1 root root 12288 Jul 29 15:17 .code.c.swp的文件了。
正常退出Vim(:q 或 :wq)时,Vim会自动清理掉这个 .swp 文件。只有在异常退出的情况下,它才会留下来作为"后悔药"。所以,遇到这个提示不要慌,这是Vim在保护你的数据。
二、Linux用户权限管理与Sudo配置
讲完了Vim的技巧,我们最后来聊一个在Linux系统中非常核心的话题:权限管理 。特别是关于 sudo 命令的使用和配置。
2.1 普通用户的Sudo权限问题
在Linux系统中,root 用户拥有至高无上的权力,可以执行任何操作。但是,出于安全考虑,我们通常不建议直接使用 root 进行日常开发,而是创建一个普通用户(例如 yunze 或 zhangsan118)。
【常见问题】
当你使用普通用户登录系统,试图执行一些需要管理员权限的命令(如安装软件、修改系统配置)时,通常会加上 sudo 前缀。例如:
bash
[yunze@iZuf6bvbodyqq8qxjtf7l6Z ~]$ sudo ls
[sudo] password for yunze:
yunze is not in the sudoers file. This incident will be reported.
你会收到一个报错:"用户不在 sudoers 文件中"。这意味着当前的普通用户没有被授权使用 sudo 提权。
2.2 配置Sudoers白名单
要解决这个问题,我们需要切换到 root 用户,将普通用户添加到 /etc/sudoers 配置文件的白名单中。
【操作步骤详解】
-
切换至Root用户 :
首先确保你是以
root身份登录,或者通过su -切换到 root。 -
编辑配置文件 :
使用Vim打开
/etc/sudoers文件:bashvim /etc/sudoers -
定位与复制配置 :
在文件中,你会看到类似这样的注释和配置:
text## Allow root to run any commands anywhere root ALL=(ALL) ALL这行配置的意思是:允许
root用户在任何主机上,以任何用户身份,执行任何命令。我们要做的,就是给普通用户也加上这一行。为了方便,我们可以利用Vim的复制粘贴功能:
- 将光标移动到
root ALL=(ALL) ALL这一行。 - 按下
yy复制该行。 - 按下
p在下方粘贴。
- 将光标移动到
-
修改用户名 :
将粘贴出来的那一行中的
root修改为你的普通用户名(例如yunze或zhangsan118):textyunze ALL=(ALL) ALL -
强制保存(关键点) :
当你尝试保存这个文件时(输入
:w),Vim可能会再次报错,提示这是一个只读文件(Read-only),即使你是root用户也可能被拦截。这是因为/etc/sudoers文件的权限设置非常严格(通常是440),旨在防止误操作。此时,你需要使用强制写入命令:
vim:w!或者在退出的同时强制保存:
vim:wq!这里的感叹号
!代表强制执行,告诉Vim:"我知道这个文件很重要,但我确定要修改它,请帮我写进去。" -
验证生效 :
保存退出后,配置是即时生效 的,不需要重启系统。
现在,你可以退出 root,切换回普通用户
yunze,再次尝试执行sudo ls。这次系统只会要求你输入当前用户的密码,而不会再报错了。
三、Vim配置原理与一键化环境搭建
3.1 Vim很挫?那是因为你没配置!
刚接触 vim 有没有觉得原始的 Vim 用起来特别"挫"?这玩意儿连个语法高亮都没有,连代码缩进都不齐,写起代码来简直是一种折磨。
但我想告诉大家的是:Vim 的强大在于它的可配置性。目前的"裸奔"状态是因为它没有经过配置,而 Vim 必须经过配置才能更好地使用!
3.1.1 为什么现在不细讲手动配置了?
如果把时光倒流回五年前、十年前,那时候我们可能得花大把时间来一行一行地写配置文件。但在现阶段,手动配置 Vim 已经不是重点了。
这篇文章,我们的核心目标是:
- 搞懂原理:大概知道 Vim 的配置是怎么一回事儿,心里有个底。
- 掌握方案 :我会直接提供一套在 CentOS 7 下的一键化配置方案。
以后大家拿到新环境,直接运行脚本,一键搞定,别再搞那些繁琐的手动配置了,听明白了吗?好,那我们就进入最后一个话题------Vim 配置。
3.2 Vim 配置的核心原理
3.2.1 用户隔离机制(最佳实践)
首先我们要明确一个概念:Vim 是支持多用户的。
-
配置文件位置 :Vim 的个性化配置,是写在当前用户的家目录下的隐藏文件
.vimrc中。
- 路径示例:
/home/zs/.vimrc或/home/yunze/.vimrc
- 路径示例:
-
各配各的 :
.vimrc属于单个用户。张三的配置只影响张三,李四的配置只影响李四。这是 Linux 权限管理的体现,也是我们的最佳实践。千万不要去改系统级的全局配置。
我们可以看下终端里的实际操作演示:
bash
# 查看当前用户家目录下的文件
[zs@bite-alicloud ~]$ ll
total 0
-rw-r--r-- 1 root root 0 Nov 12 20:27 test.c
# 编辑 .vimrc 文件(如果不存在会自动创建)
[zs@bite-alicloud ~]$ vim .vimrc
# 查看配置文件内容
[zs@bite-alicloud ~]$ cat .vimrc
set nu
# 确认当前所在路径
[zs@bite-alicloud ~]$ pwd
/home/zs
# 确认 Vim 程序的位置(所有用户共享同一个程序)
[zs@bite-alicloud ~]$ ls /usr/bin/vim
/usr/bin/vim
原理解析 :虽然系统中只有一个 /usr/bin/vim 程序,但当用户启动它时,它会先去扫描当前用户家目录下的 .vimrc,加载里面的配置项。这就是为什么每个人打开 Vim 的样子可能都不一样。
3.2.2 基础配置项详解
刚才我们说原始 Vim 比较"糙",没有语法提醒,缩进也很乱。我们可以通过修改 .vimrc 来解决。
这里有一份我用 AI 生成的推荐的基础配置清单 ,如果就是想自己配置,可以参考或直接添加到自己的 .vimrc 文件中:
| 配置命令 | 功能说明 |
|---|---|
set encoding=utf-8 |
设置编码为 UTF-8,避免中文乱码 |
set fileencodings=utf-8,ucs-bom,cp936 |
设置文件编码检测顺序 |
set nu |
显示行号 (number) |
set cursorline |
高亮当前行,方便定位 |
set ruler |
显示光标位置(右下角标尺) |
set showcmd |
在底部显示输入的命令 |
set incsearch |
搜索时逐字符匹配(增量搜索) |
set hlsearch |
高亮搜索结果 |
set ignorecase |
搜索时忽略大小写 |
set smartcase |
智能大小写(输入大写则区分,全小写则忽略) |
set tabstop=4 |
Tab 键宽度设为 4 个空格 |
set shiftwidth=4 |
自动缩进时使用 4 个空格 |
set expandtab |
将 Tab 转换为空格(推荐) |
set autoindent |
开启自动缩进 |
set smartindent |
开启智能缩进 |
set softtabstop=4 |
删除 Tab 时的退格长度 |
set backspace=indent,eol,start |
允许 Backspace 键删除缩进、换行和行首 |
syntax on |
开启语法高亮 |

像这样直接把要配置的功能使用 vim 写入到.vimrc中即可
3.3 进阶:一键化插件配置方案 (VimForCpp)
光有基础配置还不够,我们还需要语法补全、函数跳转、语法诊断等高级功能。这些都需要通过插件来实现。
为了方便,因为插件配置是非常麻烦的,我给大家推荐一个开源的一键配置项目:VimForCpp。它能帮你把 Vim 打造成一个轻量级的 C++ IDE。
3.3.1 项目获取与安装
这个项目托管在 Gitee 上,作者是 HGtz2222。CentOS下开源的一键配置项目
-
搜索项目 :在 Gitee 搜索
vimforcpp,找到HGtz2222/VimForCpp。


-
支持环境 :目前该脚本主要支持 CentOS 7 x86_64。
- 注意:如果你是 Ubuntu 用户,也有一个开源的一键配置项目,不过没有上面CentOS的功能强大Ubuntu下开源的一键配置项目


- 注意:如果你是 Ubuntu 用户,也有一个开源的一键配置项目,不过没有上面CentOS的功能强大Ubuntu下开源的一键配置项目
-
执行安装命令(以CentOS为例) :
请在你的普通用户(非 root)终端下执行以下命令:
bashcurl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh安全提示 :安装过程中需要输入 root 密码以安装依赖包(如 git、cmake 等)。请放心,脚本只是借用 root 权限装软件,不会上传你的密码。强烈不推荐直接在 root 用户下执行此脚本。

3.3.2 安装过程解析
执行脚本后,你会看到类似以下的输出流程:
- 下载数据:会下载大约 200MB 的数据,请保持网络通畅。
- 安装依赖 :脚本会自动检查并安装
git、perl、libffi等必要依赖。 - 克隆插件:从 GitHub/Gitee 拉取各种 Vim 插件(如 YouCompleteMe, NERDTree 等)。
- 编译插件:部分插件(如 YCM)需要本地编译,这一步会比较耗时,请耐心等待。
安装完成后,你可以检查一下家目录的变化:
bash
[yunze@iZuf6bvbodyq8qxjtf7l6Z ~]$ ls -al
drwx------ 8 yunze yunze 4096 Jul 29 22:09 .
drwxr-xr-x. 3 root root 4096 Jul 29 21:27 ..
-rw------- 1 yunze yunze 396 Jul 29 21:55 .bash_history
...
drwxrwxr-x 2 yunze yunze 4096 Jul 29 21:40 code
lrwxrwxrwx 1 yunze yunze 50 Jul 29 21:54 .cquery -> /home/yunze/.VimForCpp/cquery/config/cquery.config
-rw-r--r-- 1 yunze yunze 827 Jul 29 21:53 install.sh
drwx------ 3 yunze yunze 4096 Jul 29 21:55 .VimForCpp <-- 插件主目录
lrwxrwxrwx 1 yunze yunze 35 Jul 29 21:54 .vim -> /home/yunze/.VimForCpp/vim
-rw------- 1 yunze yunze 695 Jul 29 21:54 .vimrc -> /home/yunze/.VimForCpp/vim/init.vim
可以看到,脚本在你的家目录下创建了 .VimForCpp 目录,并建立了 .vimrc 的软链接指向项目内的配置文件。

3.3.3 效果验证
安装完成后,我们随便打开一个 C 文件测试一下:
bash
vim test.c
此时你会发现:
- 界面变了:左侧出现了文件目录树(NERDTree)。
- 颜色变了:代码有了漂亮的语法高亮。
- 功能强了:输入代码时会有自动补全提示,错误会有波浪线提示。

这就完成了我们从"原始粗糙 Vim"到"现代化 IDE"的蜕变。至此,关于文本编辑器 Vim 的所有话题就全部讲完了。大家下去之后,如果是 CentOS 系统,赶紧把这个 VimForCpp 装上;如果是其他系统,可以参考我之前发的文章进行系统重装也可以
3.3.3.1 关于缩进的特别说明(Tab vs Space)
大家在使用上面的方法配置好之后,使用 vim 可能会发现,代码的缩进默认是 2 个空格
-
历史原因:早期的阿里巴巴 Java 开发规范习惯用 2 个空格缩进,该开源项目的作者是阿里巴巴的一位工程师,所以就是缩进两格。
-
如何修改 :
在你的配置好后的.vimrc中找到以下几行(通常在 50-52 行左右):vimset tabstop=2 set softtabstop=2 set shiftwidth=2如果你习惯了 4 个空格,直接把这三个数字改成
4即可:vimset tabstop=4 set softtabstop=4 set shiftwidth=4保存退出后重新打开文件写代码,你会发现回车自动缩进变成了 4 个字符宽度。

结语


