第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?

  1. 企业后端服务器无图形界面:绝大多数生产环境、测试环境的Linux服务器都没有安装图形化界面,所有带GUI的编辑器/IDE(如VSCode、IDEA)都无法使用
  2. 线上紧急处理必备:安装软件、修改配置文件、线上紧急修复bug,都需要在终端黑屏下操作
  3. 效率优势:熟练使用Vim后,纯键盘操作的编辑效率远高于鼠标+键盘
  4. 职业必备技能:作为后端程序员,掌握至少一种终端文本编辑器是硬性要求

三、Vim的核心设计思想:多模式

Vim的所有操作都围绕"模式"展开,这是它与其他编辑器最大的区别。最常用的有5种模式,其中3种是基础模式:

  • 基础模式:命令模式插入模式底行模式
  • 扩展模式:替换模式视图模式(VISUAL BLOCK)

⚠️ 核心原则:命令模式是所有模式的中心,任何其他模式想要切换到另一个模式,都必须先回到命令模式。

⚠️ 万能救命键:任何模式下,按ESC键都可以立即回到命令模式!一次不行就按两次。

3.1 模式切换总览

在这里插入图片描述

  • ❌ 插入模式 ↔ 底行模式:无法直接切换,必须先按ESC回到命令模式,再切换到目标模式

四、Vim快速入门:写第一个Hello World

  1. 打开终端,进入工作目录:cd ~/code
  2. 创建并打开C语言源文件:vim code.c
    • 此时默认进入命令模式,直接输入字符是写不进去的
  3. i键进入插入模式(左下角显示INSERT
  4. 编写Hello World代码:
#include <stdio.h>

int main() {
    printf("Hello World!\n");
    return 0;
}
  1. ESC回到命令模式
  2. shift+:进入底行模式(左下角显示:
  3. 输入wq并回车,保存并退出Vim
  4. 编译代码:gcc code.c -o code
  5. 运行程序:./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?

  1. 历史原因:Vim诞生于70-80年代,当时的键盘根本没有方向键
  2. 效率原因: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,所有撤销历史都会丢失,无法再用uctrl+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++代码

步骤:

  1. ctrl+v进入视图模式
  2. j键向下移动,选中所有需要注释的行的第一列
  3. shift+i(大写I)进入插入模式
  4. 输入注释符//
  5. ESC键,等待1秒,所有选中的行都会自动加上//注释
5.5.2 批量化去注释

步骤:

  1. ctrl+v进入视图模式
  2. h/j/k/l键选中所有注释符//所在的两列区域
  3. 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非正常退出(如终端关闭、网络断开),这个临时文件不会被自动删除。
  • 解决方案:
    1. 输入R恢复未保存的修改,然后正常保存退出
    2. 删除临时交换文件:rm -f .xxx.swp(xxx是你的文件名)
    3. 再次打开文件就正常了

📌 查看隐藏文件: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,它已经集成了代码补全、语法检查、文件树等常用插件。

安装步骤:
  1. 必须使用普通用户安装,不支持root用户

  2. 执行以下命令:

    curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
    
  3. 按照提示输入root密码,等待安装完成(大约需要3-5分钟,下载约200MB)

  4. 执行source ~/.bashrc或重新登录终端,配置生效

注意事项:
  • 该配置只支持CentOS 7系列系统,不支持Ubuntu
  • 安装完成后,~/.vimrc文件会被自动修改,包含400多个配置项
  • 如果想修改缩进大小(默认2个空格),打开~/.vimrc文件,搜索tabstopshiftwidth,将值改为4即可

十、课程总结

  1. Vim是Linux下最常用的终端文本编辑器,是后端程序员的必备技能
  2. Vim的核心是多模式设计,命令模式是所有模式的中心,ESC是万能键
  3. 命令模式提供了丰富的光标定位、复制粘贴、删除、批量化操作命令,熟练使用可以极大提高编辑效率
  4. 底行模式用于文件管理、搜索替换、执行外部命令和分屏操作
  5. Vim的配置文件是~/.vimrc,每个用户独立配置,推荐新手使用一键化配置工具
  6. 常见问题:闪退生成.swp临时文件、权限问题导致保存失败、编译报错后快速定位行号

💡 学习建议:Vim没有捷径,只有多练多用才能熟练。刚开始可能会觉得别扭,但坚持使用一周后,你会发现再也离不开它了。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐