第7章:文本编辑器使用(vi/vim 与 nano)

在 Linux 系统管理中,你几乎每天都要编辑配置文件、脚本或日志。由于大多数服务器没有图形界面,掌握命令行文本编辑器是必备技能 。本章将带你从零开始掌握 vi/vimnano 两大编辑器,让你能自如地修改任何配置文件。

🌟 本章目标

  • 理解为什么 vi/vim 是 Linux 管理员的"生存技能"
  • 掌握 vi/vim 的三种模式:命令模式、插入模式、末行模式
  • 熟练使用基本编辑操作:移动、复制、粘贴、删除、查找、替换
  • 学会使用 nano 作为简单替代方案
  • 实战编辑常见配置文件(如 /etc/hosts

7.1 为什么必须学 vi/vim?

  • 所有 Linux 系统都预装 vi(或兼容版本),即使最小化安装也能用
  • ✅ 不依赖图形界面,适合远程 SSH 操作
  • ✅ 功能强大,支持正则查找、多文件编辑、宏等
  • ✅ 是 RHCE、信创认证等考试的必考内容

💬 "不会 vi,就不算真正会 Linux。"

📌 vi 是原始编辑器,vim (Vi IMproved)是增强版,openEuler 默认安装 vim,但 vi 命令仍可用。


7.2 vi/vim 的三种模式

vi/vim 的核心是模式切换。初学者常因"按了 i 却退不出"而困惑,关键在于理解三种模式:

复制代码
┌─────────────┐     i,a,o      ┌─────────────┐     ESC      ┌─────────────┐
│ 命令模式     │ ────────────→ │ 插入模式     │ ──────────→ │ 命令模式     │
│ (Command)   │               │ (Insert)     │             │ (Command)   │
└─────────────┘               └─────────────┘              └─────────────┘
       ↑                                                   │
       │                                                   ↓
       └─────────────────────────────────────────────── :wq, :q!
                         末行模式 (Last Line)

✅ 模式说明

模式 功能 进入方式 退出方式
命令模式 移动光标、复制、删除、保存等操作 启动时默认进入 ESC 返回
插入模式 输入文本内容 i, a, o ESC 返回命令模式
末行模式 保存、退出、查找替换、跳转行号 : 进入 执行命令后自动返回

⚠️ 重要:只有在命令模式下才能进入末行模式或切换到插入模式


7.3 启动与退出 vi/vim

启动编辑器

bash 复制代码
vi filename.txt
vim filename.txt

如果文件不存在,保存时会创建。

退出操作(必须在命令模式下)

命令 说明
:q 退出(文件未修改)
:q! 强制退出,不保存
:w 保存(不退出)
:wq 保存并退出
:x :wq
:w filename 另存为其他文件名

💡 记住::wq 是最常用的退出命令


7.4 插入模式:输入文本

在命令模式下,按以下键进入插入模式:

按键 功能
i 光标前插入
a 光标后插入
I 行首插入
A 行尾插入
o 当前行下方新建一行并插入
O 当前行上方新建一行并插入

实战练习

  1. 运行 vi test.txt
  2. i 进入插入模式
  3. 输入:Hello, openEuler!
  4. ESC 返回命令模式
  5. :wq 保存退出

✅ 文件已创建并保存!


7.5 命令模式:光标移动与编辑

📍 光标移动(基础)

按键 功能
h 左移
j 下移
k 上移
l 右移
0 移到行首
^ 移到第一个非空字符
$ 移到行尾
gg 跳到文件第一行
G 跳到文件最后一行
5G 跳到第 5 行
:10 跳到第 10 行(末行模式)

✂️ 删除操作

命令 功能
x 删除光标处字符
X 删除光标前字符
dd 删除整行
5dd 删除从当前行开始的 5 行
d$ 删除从光标到行尾
d0 删除从光标到行首

📋 复制与粘贴

命令 功能
yy 复制当前行
5yy 复制 5 行
p 粘贴到光标下方
P 粘贴到光标上方

🔍 查找与替换

查找文本
  • 在命令模式下按 / 进入搜索
  • 输入关键词,如 /error
  • Enter,光标跳转到第一个匹配
  • n 跳转下一个,N 上一个
替换文本(末行模式)
vim 复制代码
:s/old/new/      # 替换当前行第一个 old
:s/old/new/g     # 替换当前行所有 old
:1,$s/old/new/g  # 替换全文所有 old
:%s/old/new/g    # 同上(% 表示全文)
:%s/old/new/gc   # 替换前确认(c = confirm)

7.6 末行模式:高级操作

进入方式:在命令模式下按 :

命令 功能
:set number 显示行号
:set nonumber 关闭行号
:set hlsearch 高亮搜索结果
:nohlsearch 取消高亮
:r /etc/passwd 读取文件内容插入到当前光标位置
:w backup.txt 另存为 backup.txt

💡 实用技巧:

.vimrc 中设置默认行号:

bash 复制代码
echo "set number" >> ~/.vimrc

7.7 使用 nano 作为替代方案

nano 是一个更简单的文本编辑器,适合初学者。

启动 nano

bash 复制代码
nano filename.txt

nano 快捷键(底部有提示)

快捷键 功能
Ctrl+O 保存(Write Out)
Ctrl+X 退出(Exit)
Ctrl+K 剪切一行
Ctrl+U 粘贴
Ctrl+W 查找(Where Is)
Ctrl+\ 查找并替换
Ctrl+C 显示当前行号

✅ 优点:直观、易用

❌ 缺点:功能较弱,非所有系统预装


7.8 实战:编辑系统配置文件

案例:修改 /etc/hosts 文件

/etc/hosts 用于本地域名解析,常用于开发测试。

bash 复制代码
sudo vi /etc/hosts

在文件末尾添加:

复制代码
192.168.1.100   myapp.local
127.0.0.1       dashboard.test

保存退出后测试:

bash 复制代码
ping myapp.local

✅ 成功解析说明配置生效!


✅ 本章小结

编辑器 适用场景 学习难度 推荐指数
vi/vim 所有场景,尤其服务器管理 ⭐⭐⭐⭐☆ ⭐⭐⭐⭐⭐
nano 快速编辑、初学者 ⭐⭐ ⭐⭐⭐⭐

必记命令(vi/vim)

操作 命令
保存并退出 :wq
不保存退出 :q!
查找 /关键词
全局替换 :%s/old/new/g
显示行号 :set number
删除一行 dd
复制一行 yy
粘贴 p

📝 课后练习

  1. 创建一个文件 memo.txt,用 vi 输入三行内容,保存退出。

  2. 重新打开该文件,使用 / 查找某个单词。

  3. 将第二行复制并粘贴到文件末尾。

  4. 使用 :%s/old/new/g 将所有 "test" 替换为 "demo"。

  5. nano 编辑 /tmp/config.tmp,添加几行配置后保存。

  6. (挑战)尝试在 .vimrc 中设置自动缩进和语法高亮:

    bash 复制代码
    echo "set autoindent" >> ~/.vimrc
    echo "syntax on" >> ~/.vimrc

🔜 下一章预告:第8章《用户与用户组管理》

我们将学习:

  • Linux 多用户机制原理
  • 使用 useradd, userdel, passwd 管理用户
  • 使用 groupadd, gpasswd 管理用户组
  • 理解 /etc/passwd, /etc/shadow, /etc/group 文件结构
  • 配置 sudo 权限,实现安全提权

准备好成为系统的"人事管理员"了吗?

相关推荐
小白同学_C8 小时前
Lab4-Lab: traps && MIT6.1810操作系统工程【持续更新】 _
linux·c/c++·操作系统os
今天只学一颗糖8 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
不做无法实现的梦~9 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
默|笙11 小时前
【Linux】fd_重定向本质
linux·运维·服务器
陈苏同学12 小时前
[已解决] Solving environment: failed with repodata from current_repodata.json (python其实已经被AutoDL装好了!)
linux·python·conda
“αβ”12 小时前
网络层协议 -- ICMP协议
linux·服务器·网络·网络协议·icmp·traceroute·ping
不爱学习的老登13 小时前
Windows客户端与Linux服务器配置ssh无密码登录
linux·服务器·windows
小王C语言14 小时前
进程状态和进程优先级
linux·运维·服务器
xlp666hub14 小时前
【字符设备驱动】:从基础到实战(下)
linux·面试
弹幕教练宇宙起源15 小时前
cmake文件介绍及用法
android·linux·c++