
文章目录
-
- [1. 软件包、软件源与依赖](#1. 软件包、软件源与依赖)
- [2. yum 的常用操作](#2. yum 的常用操作)
- [3. Vim 的模式与首次编辑](#3. Vim 的模式与首次编辑)
- [4. 光标定位与文本修改](#4. 光标定位与文本修改)
- [5. 查找、替换与分屏编辑](#5. 查找、替换与分屏编辑)
- [6. vim 配置](#6. vim 配置)
- [7. 小结](#7. 小结)
在前面的基础指令中,我们已经能够管理文件、查看内容,也知道如何使用管道和重定向。接下来要解决的是:怎样在 Linux 上写程序?
在 Windows 的集成开发环境里,编辑、编译、运行经常集中在一个窗口中。Linux 终端也能完成这些工作,只是工具分工更加直观:Vim 修改源码,GCC/G++ 编译程序,make 根据规则组织构建,GDB 帮我们检查执行过程(本篇先完成工具准备与源码编辑)。
1. 软件包、软件源与依赖
安装软件不一定要自己下载源码、逐个编译文件。发行版通常都提供已经打包好的软件:其中包含程序文件,以及版本、依赖等信息。软件包管理器负责查询、下载、安装和卸载这些软件包,并在配置的软件源范围内处理依赖。
例如某个工具需要一个共享库,安装时就不只是复制工具本身,还可能需要安装那个库。所以包管理器会根据包提供的依赖信息去寻找匹配的版本。

识别自己的系统
先在服务器终端执行:
bash
cat /etc/os-release
uname -m
command -v yum
command -v dnf
command -v apt
/etc/os-release 中的 ID、VERSION_ID 等字段帮助识别发行版与版本,uname -m 查看架构;command -v 检查命令是否能找到,没有输出通常表示当前找不到它。
| 系统环境 | 本文中的使用方式 |
|---|---|
| 提供 yum 的 RPM 系发行版 | 使用下文的 yum 命令 |
| 提供 dnf 的现代 RPM 系发行版 | 常用查询、安装命令可以把 yum 换成 dnf;有些系统的 yum 本身就是兼容入口 |
| Ubuntu、Debian | 使用 apt,包名也可能不同,参看后面的对应示例 |
2. yum 的常用操作
以下示例面向 yum 可用、且软件源正常的系统。普通用户安装软件通常需要
sudo权限;如果当前已经是 root,可省略sudo。编辑自己目录下的源码则不需要提权。
查询与安装
先查 Vim 的包:
bash
yum search vim
yum info vim-enhanced
yum list installed 'vim*'


search 根据关键词查询,info 查看某个包的详情,list installed 只列已安装的匹配包。这里把 'vim*' 引起来,是让包管理器处理匹配,避免被 Shell 提前展开成当前目录的文件名。
在常见的 RHEL 兼容发行版上,完整 Vim 的包名通常为 vim-enhanced:
bash
sudo yum install vim-enhanced
vim --version
阅读安装事务中的包名、依赖和数量,再按提示确认。命令成功结束后检查 vim --version,检查是否成功下载安装。
有些系统自带有vim gcc等,可以不用再安装,输入安装命令时会提示已存在,可以直接输入版本检查命令看一下
-y 表示自动回答安装事务中的确认询问(适合已经确认安装内容的场景,不必每条命令都加):
bash
sudo yum install -y vim-enhanced
一次也可以安装多个包:
bash
sudo yum install gcc gcc-c++ make gdb
Ubuntu、Debian 上对应的准备命令为:
bashsudo apt update sudo apt install vim gcc g++ make gdb
卸载与查看软件源
卸载语法是 sudo yum remove 包名。例如确实不再需要完整 Vim 时,才执行:
bash
sudo yum remove vim-enhanced
删除事务也可能涉及依赖包,应读完列表再确认。
查看启用的仓库与常见配置位置:
bash
yum repolist
ls /etc/yum.repos.d/
.repo 是配置文件,不是软件本体。EPEL 是部分企业 Linux 环境中的扩展软件仓库,本篇所需工具通常可直接从系统仓库安装。
如果安装失败了,可参考以下现象判断修改:
| 现象 | 应检查的方向 |
|---|---|
command not found |
管理器或工具是否存在,是否选错发行版的命令 |
| 找不到指定包 | 包名、启用仓库、发行版版本和架构 |
| 下载或解析域名失败 | 网络、DNS、仓库地址;能 ping 通一个站点不代表软件源一定可访问 |
| 提示锁被其他事务占用 | 等待另一个安装或更新事务结束,不直接删锁文件 |
| 权限不足 | 当前用户是否有相应的 sudo 授权 |
3. Vim 的模式与首次编辑
Vim 是一种文本编辑器。其特点是:同一按键在不同模式下,含义可能不同。 例如普通模式的 i 是进入插入模式;插入模式的 i 才是输入字符。这也解释了刚打开 Vim 时,直接敲代码为什么会出现意料之外的行为。

| 常用模式 | 用途 | 从普通模式进入 | 返回方式 |
|---|---|---|---|
| 普通模式(也常被称为命令模式) | 移动、删除、复制、发起其他操作 | 打开 Vim 后通常处于此模式 | 其他常用编辑模式下按 Esc |
| 插入模式 | 输入文本 | i、a、o |
Esc |
| 命令行模式(常称底行、末行模式) | 执行保存、退出、设置等命令 | : |
Enter 执行,Esc 取消 |
| 替换模式 | 连续覆盖文本 | R |
Esc |
| 可视模式 | 先选区,再复制、删除等 | v 或 V |
Esc 取消选择 |
"视图模式"在这里更准确的名称是可视模式(Visual mode) 。普通模式也不要与输入
:后的命令行模式混为一谈。
可以在自己的用户家目录下准备练习目录:
bash
mkdir -p ~/linux-dev-study/edit
cd ~/linux-dev-study/edit
vim hello.c
按 i,输入以下完整代码:
c
#include <stdio.h>
int main(void)
{
printf("hello linux\n");
return 0;
}
输入完成后按 Esc,再输入 :wq 并按回车。回到 Shell 后检查:
bash
cat hello.c

注意区分:
cat hello.c在 Shell 中执行,:wq在 Vim 中执行。Vim 打开的新文件,通常直到成功写入后才在磁盘上建立。
保存与退出的边界
| 操作 | 作用 |
|---|---|
:w |
写入当前文件,继续编辑 |
:q |
关闭当前窗口;有未保存修改时通常拒绝退出 |
:wq |
写入并关闭当前窗口 |
:q! |
强制关闭当前窗口;在单窗口、单缓冲区的本篇练习中会放弃未保存修改 |
ZZ |
普通模式下连按两个大写 Z;文件有修改时写入,再关闭当前窗口 |
单窗口时,关闭最后一个窗口便会退出 Vim。后面分屏操作不同文件时,:q 只是关闭当前窗口。
注意不要把
!当作"万能成功按钮"::q!会丢弃修改,也不能修复文件写权限。
ZZ 不输入冒号(不需要进入命令行模式);
本文用
G表示大写 G,gg表示连续按两次小写 g,20G表示依次按2、0、大写G,不是同时按住这些键。大写字母可使用 shift + 小写字母 得到
4. 光标定位与文本修改
重新打开 vim hello.c,以下操作默认从普通模式开始。初次了解时可以暂时不追求记住全部组合,先能准确找到位置,再进行修改,用多了自然就记住了。
按位置移动
| 范围 | 按键 | 含义 |
|---|---|---|
| 相邻位置 | h/j/k/l |
左、下、上、右;方向键也可以使用 |
| 单词 | w、b |
跳到下一个单词开头、向前跳到单词开头 |
| 行内 | 0、^、$ |
行首、第一个非空白字符、行尾 |
| 文件内 | gg、G、5G |
第一行、最后一行、第 5 行 |
| 翻页 | Ctrl+f、Ctrl+b |
向文件后方、前方翻一页 |
- 代码行通常都会有缩进,所以
0与^很容易观察出区别:前者到第一个字符位置,后者跳过行首空格和 Tab; w/b根据 Vim 对"单词"的划分移动,遇到标点会进一步分段,不必理解成自然语言里的完整词语。
进入输入与替换模式
i 在光标前插入,a 在光标后插入,o 在当前行下方新开一行并进入插入模式。
它们的区别是输入起点不同的问题(其余并无差别,了解即可)。
修改单个字符可用 r,随后输入新字符。例如光标放在 hello 的 h 上,按 rH 得到 Hello,不需要再按 Esc 结束一次替换。R 则进入连续替换模式,直到 Esc。
普通模式下,~ 切换光标处字母的大小写,并通常向后移动一位;X 删除光标前一个字符,x 删除光标所在字符。
复制、删除和移动
| 操作 | 按键 | 效果 |
|---|---|---|
| 复制当前行 | yy |
将整行复制到默认使用的寄存器 |
| 复制多行 | 3yy |
从当前行起复制 3 行 |
| 删除当前行 | dd |
删除整行,同时保存到寄存器,便于粘贴 |
| 删除多行 | 2dd |
从当前行起删除 2 行 |
| 粘贴 | p |
整行内容放到当前行下方;字符内容放到光标后方 |
| 在前方粘贴 | P |
整行内容放到当前行上方;字符内容放到光标前方 |
| 撤销 | u |
撤销上一次修改 |
| 恢复撤销 | Ctrl+r |
恢复刚撤销的修改 |

可视选择
v(小写):字符可视模式,按字符自由选中一段文本,移动光标扩大选区V(大写):行可视模式,直接选中整行,移动光标多选连续多行Ctrl + v:块可视模式(矩形块),适合批量注释代码,是写 C/C++ 代码的高频用法- 选中后的操作:
y:复制选中区域d:删除选中区域(剪切)
- 操作流程:普通模式进入可视选择 → 移动光标扩大选区 → y/d 操作 → 按
Esc退出可视模式,移动光标到目标位置,p粘贴
批量注释操作流程:
普通模式按
Ctrl+v进入矩形块可视选择 → 移动光标框选多行同一列区域 → 按大写I,输入注释符号//→ 按Esc,所有选中行同步添加注释。
批量取消注释流程:普通模式按
Ctrl+v进入矩形块可视选择 → 移动光标框选所有行开头的//→ 按d删除矩形选中内容 → 按Esc退出可视模式。
5. 查找、替换与分屏编辑
查找与连续定位
- 普通模式下直接输入
/hello并回车,向后查找; - 输入
?hello并回车,向前查找。 n沿这次搜索的方向继续,N反方向继续。
把光标移到一个标识符上,* 查找后面的同名单词,# 查找前面的同名单词。
替换文本
只把当前行的 hello 换成 Hello:
vim
:s/hello/Hello/
在整个文件中逐项确认替换:
vim
:%s/hello/Hello/gc
% 表示所有行,g 表示每行内的所有匹配,c 表示每次替换前确认。没有 g 时,通常只替换每行的第一个匹配。
输入替换命令时,旧文本在前、新文本在后
行号与窗口
vim
:set nu
:set nonu
:vs notes.txt
- 前两条命令分别是显示、隐藏行号,行号是编辑界面的一部分,不会写进源文件。
:vs notes.txt是纵向分屏并在新窗口打开新文件;两个(多个)窗口左右排列。Ctrl+w后再按w切换窗口,也可按Ctrl+w后再按h/l切到左、右窗口。
窗口是显示文件内容的区域,两个窗口也可以显示同一文件。
临时执行 Shell 命令
在 Vim 中查看当前目录可输入:
vim
:!pwd
!可以让 Vim 在命令行模式下临时执行外部命令,结束后按提示返回编辑。
如果后面用
:!gcc hello.c -o hello编译,编译器读取的是磁盘上的源码 ,不会自动读取还没保存的编辑内容。所以需要先:w,再编译,才能避免"明明改了代码,结果却没变"。
6. vim 配置
在 Vim 中执行 :set nu 主要影响当前会话;想让常用设置下次仍生效,可以编辑当前用户的 ~/.vimrc。已有文件时追加或有选择地修改。
vim
syntax on
set number
set tabstop=4
set shiftwidth=4
set expandtab
tabstop 控制 Tab 字符的显示宽度,shiftwidth 控制缩进操作的宽度,expandtab 让通常的 Tab 输入使用空格。
配置方面可以按照自己的喜好在网上查找各种各样的资料进行配置,嫌麻烦的话可以去找找开源的一键配置方案,这边给出一个 gitee 仓库的 Vimforcpp ,配置时建议是在普通用户下进行,专门给自己的用户配置,不影响其他用户。
7. 小结
-
CentOS7 使用 yum 包管理器完成软件安装,可执行安装、卸载、查询软件包操作。
-
Vim 是多模式编辑器,核心分为普通模式、插入模式、命令模式、可视模式。
-
常用光标跳转、复制删除、撤销等操作均在普通模式完成,按
i进入插入模式编写具体代码。 -
可视模式分 3 种:
v字符选择、V行选择、Ctrl+v矩形块选择,矩形块多用于批量注释代码。 -
.vimrc可配置语法高亮、行号、Tab 缩进,仅对当前用户生效,不影响服务器其他账号。
