第7课:Linux开发工具(二):vim
本文介绍了Linux开发工具Vim的核心概念和使用方法。Vim作为Linux下独立的文本编辑器,遵循工具独立化的开发哲学,仅负责代码编写功能。文章阐述了学习Vim的必要性,包括服务器环境需求、紧急处理能力和效率优势。重点讲解了Vim的多模式设计思想,特别是命令模式、插入模式和底行模式之间的切换关系。通过Hello World示例展示了基本使用流程,并详细解析了命令模式下的光标定位、复制粘贴、删除撤
第7课:Linux开发工具(二):vim
一、Linux开发工具概述
1.1 什么是IDE
集成开发环境(IDE) 是将代码编写、编译、调试、运行等所有开发功能集成在一个软件中的工具。
- Windows平台常用IDE:VS2022(C/C++)、IDEA(Java)、Eclipse、PyCharm(Python)
- 特点:一站式解决方案,操作简单,适合初学者
1.2 Linux下的开发工具哲学:工具独立化
Linux下没有传统意义上的IDE,所有开发功能由独立的工具分别完成:
- ✅ 写代码:编辑器 Vim/Vi(Vi是老版本,Vim是Vi的增强版,课程全程使用Vim)
- ✅ 编译代码:gcc/g++(C/C++)、javac(Java)、Python解释器
- ✅ 调试代码:gdb/cgdb
- ✅ 构建工具:makefile、make、cmake
- ✅ 版本控制:git
📌 核心结论:Vim只是一个纯文本编辑器,它的唯一功能就是写代码。编译、调试、运行都需要交给其他独立工具完成。
二、为什么必须学习Vim?
- 企业后端服务器无图形界面:绝大多数生产环境、测试环境的Linux服务器都没有安装图形化界面,所有带GUI的编辑器/IDE(如VSCode、IDEA)都无法使用
- 线上紧急处理必备:安装软件、修改配置文件、线上紧急修复bug,都需要在终端黑屏下操作
- 效率优势:熟练使用Vim后,纯键盘操作的编辑效率远高于鼠标+键盘
- 职业必备技能:作为后端程序员,掌握至少一种终端文本编辑器是硬性要求
三、Vim的核心设计思想:多模式
Vim的所有操作都围绕"模式"展开,这是它与其他编辑器最大的区别。最常用的有5种模式,其中3种是基础模式:
- 基础模式:命令模式、插入模式、底行模式
- 扩展模式:替换模式、视图模式(VISUAL BLOCK)
⚠️ 核心原则:命令模式是所有模式的中心,任何其他模式想要切换到另一个模式,都必须先回到命令模式。
⚠️ 万能救命键:任何模式下,按ESC键都可以立即回到命令模式!一次不行就按两次。
3.1 模式切换总览

- ❌ 插入模式 ↔ 底行模式:无法直接切换,必须先按ESC回到命令模式,再切换到目标模式
四、Vim快速入门:写第一个Hello World
- 打开终端,进入工作目录:
cd ~/code - 创建并打开C语言源文件:
vim code.c- 此时默认进入命令模式,直接输入字符是写不进去的
- 按i键进入插入模式(左下角显示
INSERT) - 编写Hello World代码:
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
- 按ESC回到命令模式
- 按shift+:进入底行模式(左下角显示
:) - 输入wq并回车,保存并退出Vim
- 编译代码:
gcc code.c -o code - 运行程序:
./code
📌 补充说明:裸的Vim(未配置)没有语法高亮、自动补全、括号匹配等功能,就像一个纯记事本,所有高级功能都需要通过配置实现。
五、命令模式详解(Vim的灵魂)
命令模式是Vim的核心,所有高效编辑操作都在这里完成。学习Vim本质上就是学习命令模式的各种命令。
💡 命令模式的本质:你按下的键盘字符不是输入内容,而是向Vim发送的指令。指令越多、越熟练,编辑效率越高,因为指令背后是自动化和批量化操作。
5.1 光标定位操作(彻底抛弃鼠标!)
5.1.1 全局行定位
| 命令 | 功能 |
|---|---|
gg |
快速定位到文本第一行 |
shift+g(大写G) |
快速定位到文本最后一行 |
n+shift+g(大写G) |
快速定位到第n行(如100+shift+g定位到第100行) |
5.1.2 行内定位(锚点)
| 命令 | 功能 |
|---|---|
shift+4($) |
快速定位到当前行末尾 |
shift+6(^) |
快速定位到当前行开头 |
5.1.3 方向键
- 传统方向键:↑↓←→(不推荐)
- Vim专用方向键(强烈推荐):
h:向左移动j:向下移动(记忆:jump=跳,往下跳)k:向上移动(记忆:king=国王,高高在上)l:向右移动
📌 为什么有方向键还要用h/j/k/l?
- 历史原因:Vim诞生于70-80年代,当时的键盘根本没有方向键
- 效率原因:h/j/k/l位于键盘主键盘区,右手不用离开打字区就能操作,比移动手去按方向键快得多
5.1.4 按单词移动
| 命令 | 功能 |
|---|---|
w |
向右移动一个单词(word) |
b |
向左移动一个单词(back) |
n+w |
向右移动n个单词 |
n+b |
向左移动n个单词 |
📌 补充说明:Vim中的"单词"不仅包括英文字母,特殊字符(如!、@、#等)也会被当作一个独立的单词。
5.2 复制、粘贴、删除操作
5.2.1 复制(yank)
| 命令 | 功能 |
|---|---|
yy |
复制光标所在的整行 |
n+yy |
复制从光标所在行开始的连续n行 |
5.2.2 粘贴(put)
| 命令 | 功能 |
|---|---|
p |
将复制的内容粘贴到光标所在行的下一行 |
n+p |
将复制的内容重复粘贴n次 |
💡 效率演示:
yy复制一行,然后10000p可以瞬间粘贴10000行,这是GUI编辑器无法比拟的批量化效率。
5.2.3 删除(delete)
| 命令 | 功能 |
|---|---|
dd |
删除光标所在的整行 |
n+dd |
删除从光标所在行开始的连续n行 |
x |
删除光标后面的一个字符(向右删除) |
shift+x(大写X) |
删除光标前面的一个字符(向左删除) |
n+x |
从光标位置开始向右删除n个字符 |
n+shift+x |
从光标位置开始向左删除n个字符 |
📌 重要特性:
dd命令本质上是剪切!删除的内容会被保存到剪贴板,之后按p可以粘贴出来。如果不粘贴,就是删除;如果粘贴,就是剪切。
5.3 撤销与反撤销
| 命令 | 功能 |
|---|---|
u |
撤销上一次操作(undo) |
ctrl+r |
反撤销(撤销上一次的u操作) |
⚠️ 易错警告:
- ✅ 只要没有退出Vim,随时可以用
u撤销所有操作,哪怕已经保存过(w)也可以撤销- ❌ 一旦退出Vim,所有撤销历史都会丢失,无法再用
u或ctrl+r恢复
5.4 大小写转换与替换
5.4.1 单个字符大小写转换
| 命令 | 功能 |
|---|---|
shift+~ |
将光标所在字符的大小写互换(小写变大写,大写变小写) |
5.4.2 单个字符替换
| 命令 | 功能 |
|---|---|
r+新字符 |
将光标所在的一个字符替换为新字符 |
n+r+新字符 |
将从光标位置开始的连续n个字符都替换为新字符 |
示例:光标在字符’a’上,输入
r+b,则’a’变成’b’;输入3+r+0,则从’a’开始的3个字符都变成’0’。
5.4.3 批量替换(替换模式)
| 命令 | 功能 |
|---|---|
shift+r(大写R) |
进入替换模式(左下角显示REPLACE) |
- 替换模式下,你输入的每个字符都会覆盖原来的字符,直到按ESC回到命令模式
- 适合整段内容写错需要重新输入的场景,不用先删除再输入
5.5 视图模式(VISUAL BLOCK):批量化操作神器
视图模式用于选中一块矩形区域,然后对这块区域进行统一的批量化操作。
| 命令 | 功能 |
|---|---|
ctrl+v |
进入视图模式(左下角显示VISUAL BLOCK) |
进入视图模式后,用h/j/k/l方向键移动光标,选中你想要操作的矩形区域。
5.5.1 最常用:批量化注释C/C++代码
步骤:
- 按
ctrl+v进入视图模式 - 用
j键向下移动,选中所有需要注释的行的第一列 - 按
shift+i(大写I)进入插入模式 - 输入注释符
// - 按ESC键,等待1秒,所有选中的行都会自动加上
//注释
5.5.2 批量化去注释
步骤:
- 按
ctrl+v进入视图模式 - 用
h/j/k/l键选中所有注释符//所在的两列区域 - 按
d键,所有选中的注释符都会被一次性删除
5.5.3 其他批量化操作
- 批量添加字符:选中区域后
shift+i输入字符,ESC自动批量添加 - 批量替换字符:选中区域后
r+新字符,所有选中的字符都会被替换为新字符 - 批量删除:选中区域后
d键,一次性删除所有选中内容
六、底行模式详解
底行模式主要用于文件保存、退出、搜索、替换、执行外部命令等操作。
进入方式:在命令模式下按shift+:(即输入冒号),左下角会显示:提示符。
6.1 文件保存与退出
| 命令 | 功能 |
|---|---|
w |
保存文件(write) |
q |
退出Vim(quit) |
wq |
保存并退出 |
w! |
强制保存(用于只读文件) |
q! |
强制退出不保存(放弃所有修改) |
wq! |
强制保存并退出 |
shift+zz(大写ZZ) |
命令模式下的快捷保存退出,等同于wq |
⚠️ 权限问题说明:
- 如果文件是只读的,普通的
w会保存失败- 如果你是文件的拥有者,可以用
w!强制保存- 如果你不是文件拥有者,即使是root用户,也需要用
w!才能强制保存
6.2 行号设置
| 命令 | 功能 |
|---|---|
set nu |
显示行号(number) |
set nonu |
隐藏行号 |
6.3 搜索功能
| 命令 | 功能 |
|---|---|
/关键词 |
从当前位置向下搜索指定关键词 |
n |
跳转到下一个匹配的关键词 |
N |
跳转到上一个匹配的关键词 |
- 搜索到的关键词会被高亮显示
- 输入
:noh可以取消高亮(常用补充命令)
6.4 执行外部Shell命令
| 命令 | 功能 |
|---|---|
!命令 |
不退出Vim,直接执行指定的Shell命令 |
示例:
!gcc code.c:编译当前打开的code.c文件!./a.out:运行编译生成的a.out程序!ls -al:列出当前目录下的所有文件(包括隐藏文件)!pwd:显示当前工作目录
执行完命令后,按任意键会自动回到Vim界面。
6.5 全局文本替换
| 命令 | 功能 |
|---|---|
%s/原字符串/新字符串/g |
将整个文件中所有的"原字符串"替换为"新字符串" |
%:表示整个文件范围s:substitute,替换g:global,全局替换(不加g只替换每行第一个匹配项)
示例:
%s/printf/cout/g将文件中所有的printf替换为cout
6.6 分屏操作:多文件同时编辑
| 命令 | 功能 |
|---|---|
vs 文件名 |
垂直分屏打开另一个文件(如果文件不存在则新建) |
ctrl+ww |
在多个分屏之间切换光标 |
- 分屏后,光标在哪个分屏,操作的就是哪个文件
- 每个分屏都有自己独立的底行模式
- 适合同时编辑头文件(.h)和源文件(.c/.cpp)的场景
七、插入模式详解
插入模式就是普通的文本编辑模式,和你用记事本、Word打字没有任何区别,可以输入、删除、修改内容。
7.1 进入插入模式的三种常用方式
| 命令 | 功能 |
|---|---|
i |
在光标当前位置之前插入(insert) |
a |
在光标当前位置之后插入(append) |
o |
在光标所在行的下一行新建一行并插入 |
这三个命令足够应对99%的插入场景,其他进入方式不用记。
八、Vim常见问题与解决方案
8.1 问题1:Vim闪退/终端断开,再次打开文件时出现警告
- 现象:打开文件时提示"Found a swap file by the name .xxx.swp"
- 原因:Vim在编辑文件时会自动生成一个隐藏的临时交换文件(.swp后缀),用于防止意外丢失数据。如果Vim非正常退出(如终端关闭、网络断开),这个临时文件不会被自动删除。
- 解决方案:
- 输入
R恢复未保存的修改,然后正常保存退出 - 删除临时交换文件:
rm -f .xxx.swp(xxx是你的文件名) - 再次打开文件就正常了
- 输入
📌 查看隐藏文件:
ls -al(以.开头的文件是隐藏文件)
8.2 问题2:编译报错后,快速定位到错误行
-
现象:GCC编译报错提示"code.c:9: error: expected ‘;’ before ‘return’",表示第9行有语法错误
-
解决方案:直接用以下命令打开文件并定位到第9行:
vim code.c +9 -
这样Vim打开文件后,光标会自动定位到第9行,不用手动翻找
九、Vim配置详解
裸的Vim功能非常简陋,通过配置可以让它拥有语法高亮、自动补全、括号匹配、自动缩进等IDE级别的功能。
9.1 Vim配置原理
- Vim启动时会自动读取当前用户家目录下的隐藏配置文件:
~/.vimrc - 对vim做基本配置,本质是把配置项写进
/home/XX/.vimrc配置文件中 - 每个用户有自己独立的
.vimrc文件,配置只对当前用户有效,不会影响其他用户 - 如果家目录下没有
.vimrc文件,自己新建一个即可
9.2 基本配置示例
在~/.vimrc文件中添加以下内容:
" 显示行号
set nu
" 语法高亮
syntax on
" 高亮当前行
set cursorline
" 显示当前模式
set showmode
" 自动缩进
set autoindent
set smartindent
" 将Tab键转换为4个空格
set tabstop=4
set shiftwidth=4
set expandtab
" 高亮匹配括号
set showmatch
" 设置编码为UTF-8
set encoding=utf-8
保存退出后,重新打开Vim,配置就会生效。
9.3 一键化配置(推荐新手使用)
手动配置Vim插件非常复杂,课程推荐使用比特提供的一键化配置工具vimforcpp,它已经集成了代码补全、语法检查、文件树等常用插件。
安装步骤:
-
必须使用普通用户安装,不支持root用户
-
执行以下命令:
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh -
按照提示输入root密码,等待安装完成(大约需要3-5分钟,下载约200MB)
-
执行
source ~/.bashrc或重新登录终端,配置生效
注意事项:
- 该配置只支持CentOS 7系列系统,不支持Ubuntu
- 安装完成后,
~/.vimrc文件会被自动修改,包含400多个配置项 - 如果想修改缩进大小(默认2个空格),打开
~/.vimrc文件,搜索tabstop和shiftwidth,将值改为4即可
十、课程总结
- Vim是Linux下最常用的终端文本编辑器,是后端程序员的必备技能
- Vim的核心是多模式设计,命令模式是所有模式的中心,ESC是万能键
- 命令模式提供了丰富的光标定位、复制粘贴、删除、批量化操作命令,熟练使用可以极大提高编辑效率
- 底行模式用于文件管理、搜索替换、执行外部命令和分屏操作
- Vim的配置文件是
~/.vimrc,每个用户独立配置,推荐新手使用一键化配置工具 - 常见问题:闪退生成.swp临时文件、权限问题导致保存失败、编译报错后快速定位行号
💡 学习建议:Vim没有捷径,只有多练多用才能熟练。刚开始可能会觉得别扭,但坚持使用一周后,你会发现再也离不开它了。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)