Linux 软件安装与 Vim 编辑

文章目录

在前面的基础指令中,我们已经能够管理文件、查看内容,也知道如何使用管道和重定向。接下来要解决的是:怎样在 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 上对应的准备命令为:

bash 复制代码
sudo 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 缩进,仅对当前用户生效,不影响服务器其他账号。

相关推荐
CQU_JIAKE1 小时前
10.28【A】
linux·运维·网络
爱和冰阔落1 小时前
【Linux网络】Socket 编程前要搞懂什么?从 IP、端口到字节序与 sockaddr,一次理清网络通信基础
linux·运维·网络·tcp/ip
JIAOZHANZHISHIKU1 小时前
具身机器人高温胶选哪种符合要求?机器人粘接胶选型解析
经验分享·机器人·工业胶粘剂·3m胶粘剂
晚风叙码1 小时前
Linux 进程概念(上):从冯诺依曼到进程调度
linux·运维·计算机外设
邪修king1 小时前
Re:Linux系统篇(三十八):进程间通信ChapterSystem V 信号量深度解析|同步互斥、内核源码、C 指针多态、实战代码
java·linux·c语言
坤坤子吖1 小时前
Linux网络编程基础:从 MAC 到 IP,理解网络数据是怎么传输的
linux·网络·笔记·学习
琥珀.10 小时前
mysql中json数组转列表查询
linux·运维·服务器
dawnsky.liu11 小时前
在 RHEL 中使用 goose 实现远程主机管理
linux·运维·ai
2601_9672127211 小时前
智能电源轨道技术原理、认证核查与场景适配说明
大数据·经验分享·安全