Linux基础开发工具(三):Vim高级配置、Swap恢复机制与Sudo权限白名单详解

目录

  • 前言
  • 一、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非正常退出时,这个文件会被保留下来。

【解决方案与操作步骤】

面对这个提示,我们需要根据情况选择对应的选项:

  1. 恢复数据(推荐)

    如果你是因为崩溃导致未保存,请选择 ®ecover 。Vim会尝试从 .swp 文件中恢复你上次编辑的内容。

    • 恢复完成后,检查内容是否完整。

    • 确认无误后,正常保存退出(:wq)。

    • 关键一步 :恢复并保存后,那个 .swp 文件就变成了垃圾文件。你需要手动删除它,否则下次打开还会提示。可以使用命令:

      bash 复制代码
      rm .code.c.swp

      或者在Vim内部使用 :!rm .code.c.swp

  2. 直接删除Swap文件

    如果你确定之前的修改都不想要了,或者已经通过其他方式恢复了,可以选择 (D)elete it。这会直接删除交换文件,让你干净地打开原文件。

  3. 查看隐藏文件

    平时我们在目录下 ls 是看不到 .swp 文件的,因为它是隐藏文件。如果你想确认它的存在,需要使用 -a 参数:

    bash 复制代码
    ls -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 进行日常开发,而是创建一个普通用户(例如 yunzezhangsan118)。

【常见问题】

当你使用普通用户登录系统,试图执行一些需要管理员权限的命令(如安装软件、修改系统配置)时,通常会加上 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 配置文件的白名单中。

【操作步骤详解】

  1. 切换至Root用户

    首先确保你是以 root 身份登录,或者通过 su - 切换到 root。

  2. 编辑配置文件

    使用Vim打开 /etc/sudoers 文件:

    bash 复制代码
    vim /etc/sudoers
  3. 定位与复制配置

    在文件中,你会看到类似这样的注释和配置:

    text 复制代码
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL

    这行配置的意思是:允许 root 用户在任何主机上,以任何用户身份,执行任何命令。

    我们要做的,就是给普通用户也加上这一行。为了方便,我们可以利用Vim的复制粘贴功能:

    • 将光标移动到 root ALL=(ALL) ALL 这一行。
    • 按下 yy 复制该行。
    • 按下 p 在下方粘贴。
  4. 修改用户名

    将粘贴出来的那一行中的 root 修改为你的普通用户名(例如 yunzezhangsan118):

    text 复制代码
    yunze   ALL=(ALL)       ALL
  5. 强制保存(关键点)

    当你尝试保存这个文件时(输入 :w),Vim可能会再次报错,提示这是一个只读文件(Read-only),即使你是 root 用户也可能被拦截。这是因为 /etc/sudoers 文件的权限设置非常严格(通常是 440),旨在防止误操作。

    此时,你需要使用强制写入命令:

    vim 复制代码
    :w!

    或者在退出的同时强制保存:

    vim 复制代码
    :wq!

    这里的感叹号 ! 代表强制执行,告诉Vim:"我知道这个文件很重要,但我确定要修改它,请帮我写进去。"

  6. 验证生效

    保存退出后,配置是即时生效 的,不需要重启系统。

    现在,你可以退出 root,切换回普通用户 yunze,再次尝试执行 sudo ls。这次系统只会要求你输入当前用户的密码,而不会再报错了。

三、Vim配置原理与一键化环境搭建

3.1 Vim很挫?那是因为你没配置!

刚接触 vim 有没有觉得原始的 Vim 用起来特别"挫"?这玩意儿连个语法高亮都没有,连代码缩进都不齐,写起代码来简直是一种折磨。

但我想告诉大家的是:Vim 的强大在于它的可配置性。目前的"裸奔"状态是因为它没有经过配置,而 Vim 必须经过配置才能更好地使用!

3.1.1 为什么现在不细讲手动配置了?

如果把时光倒流回五年前、十年前,那时候我们可能得花大把时间来一行一行地写配置文件。但在现阶段,手动配置 Vim 已经不是重点了

这篇文章,我们的核心目标是:

  1. 搞懂原理:大概知道 Vim 的配置是怎么一回事儿,心里有个底。
  2. 掌握方案 :我会直接提供一套在 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 上,作者是 HGtz2222CentOS下开源的一键配置项目

  1. 搜索项目 :在 Gitee 搜索 vimforcpp,找到 HGtz2222/VimForCpp

  2. 支持环境 :目前该脚本主要支持 CentOS 7 x86_64

  3. 执行安装命令(以CentOS为例)

    请在你的普通用户(非 root)终端下执行以下命令:

    bash 复制代码
    curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

    安全提示 :安装过程中需要输入 root 密码以安装依赖包(如 git、cmake 等)。请放心,脚本只是借用 root 权限装软件,不会上传你的密码。强烈不推荐直接在 root 用户下执行此脚本。

3.3.2 安装过程解析

执行脚本后,你会看到类似以下的输出流程:

  1. 下载数据:会下载大约 200MB 的数据,请保持网络通畅。
  2. 安装依赖 :脚本会自动检查并安装 gitperllibffi 等必要依赖。
  3. 克隆插件:从 GitHub/Gitee 拉取各种 Vim 插件(如 YouCompleteMe, NERDTree 等)。
  4. 编译插件:部分插件(如 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

此时你会发现:

  1. 界面变了:左侧出现了文件目录树(NERDTree)。
  2. 颜色变了:代码有了漂亮的语法高亮。
  3. 功能强了:输入代码时会有自动补全提示,错误会有波浪线提示。

这就完成了我们从"原始粗糙 Vim"到"现代化 IDE"的蜕变。至此,关于文本编辑器 Vim 的所有话题就全部讲完了。大家下去之后,如果是 CentOS 系统,赶紧把这个 VimForCpp 装上;如果是其他系统,可以参考我之前发的文章进行系统重装也可以

3.3.3.1 关于缩进的特别说明(Tab vs Space)

大家在使用上面的方法配置好之后,使用 vim 可能会发现,代码的缩进默认是 2 个空格

  • 历史原因:早期的阿里巴巴 Java 开发规范习惯用 2 个空格缩进,该开源项目的作者是阿里巴巴的一位工程师,所以就是缩进两格。

  • 如何修改
    在你的配置好后的 .vimrc 中找到以下几行(通常在 50-52 行左右):

    vim 复制代码
    set tabstop=2
    set softtabstop=2
    set shiftwidth=2

    如果你习惯了 4 个空格,直接把这三个数字改成 4 即可:

    vim 复制代码
    set tabstop=4
    set softtabstop=4
    set shiftwidth=4

    保存退出后重新打开文件写代码,你会发现回车自动缩进变成了 4 个字符宽度。

结语

相关推荐
Urbano1 小时前
服装厂入局自动化开袋设备:市场前景、机型选型与落地实效科普
运维·自动化
tju23331 小时前
Gitee Test是什么:从测试资产管理到自动化执行的工程化实践
运维·gitee·自动化
名字还没想好☜1 小时前
Kubernetes Pod 调度实战:nodeSelector、亲和性与 taint/toleration 把 Pod 放到指定节点
运维·云原生·容器·kubernetes·调度
qetfw1 小时前
CentOS 7 vsftpd.conf 配置文件详解:监听、用户、权限、被动模式与 TLS
linux·运维·centos·ftp·vsftpd
风曦Kisaki2 小时前
Kubernetes(K8s)笔记Day04:控制器(ReplicaSet 与Deployment),滚动更新及回滚,滚动更新策略,Pod 的 DNS 策略
linux·运维·笔记·docker·容器·kubernetes
code_whiter2 小时前
初阶linux2环境基础开发工具完整教程
linux
薛定e的猫咪2 小时前
零基础选型指南:Make / 扣子 Coze/n8n/Dify 四大自动化平台完整对比
运维·自动化
AmazingEgg2 小时前
RHCSA 第三天学习笔记
linux
数聚天成DeepSData2 小时前
外贸海关进出口数据去哪免费下载?从统计到明细的查找指南
linux·服务器·开发语言·前端·网络·人工智能·自然语言处理