CentOS Stream 9入门学习教程,从入门到精通, Linux文本编辑器 —— 语法详解与实战案例(5)

Linux文本编辑器 ------ 语法详解与实战案例


一、Linux文本编辑器概述

Linux 提供多种文本编辑器,按交互方式可分为:

类型 代表编辑器 特点
行编辑器 ed 最古老,无屏幕交互,适合脚本自动化
全屏编辑器 vi / vim 终端标配,功能强大,学习曲线陡峭
图形编辑器 gedit GNOME 默认,支持语法高亮、鼠标操作
扩展编辑器 Emacs 功能极其丰富(邮件、日历、调试等),可编程
简易编辑器 nano 新手友好,操作直观,适合快速编辑

✅ 查看系统默认编辑器:

bash 复制代码
echo $EDITOR
# 若未设置,可临时设置:export EDITOR=vim

Linux文本编辑器主要分为两类:

  1. 命令行编辑器 :在终端中运行,无需图形界面,效率高,适合远程服务器管理。
    • ed:行编辑器,最古老的Unix编辑器,现在很少使用。
    • vi / Vim:Visual Editor及其改进版(Vi IMproved),是Linux系统最经典、最强大的命令行编辑器,几乎所有Unix-like系统都预装。
    • Nano:简单易用的命令行编辑器,对新手友好。
  2. 图形界面编辑器 :在桌面环境中运行,使用鼠标和菜单操作,直观易用。
    • gedit:GNOME桌面环境的默认文本编辑器。
    • Emacs:功能极其强大的可扩展编辑器,本身几乎是一个操作系统。
    • KateSublime TextVSCode等。

二、ed 编辑器(行编辑器)

2.1 简介

  • 最早的 Unix 编辑器(1971),无图形界面,逐行操作。
  • 适用于脚本中自动化编辑,不适合人工交互。

2.2 基本语法

bash 复制代码
ed [文件名]
  • 输入行号或范围 + 命令进行操作
  • w 保存,q 退出

✅ 案例:使用 ed 创建并编辑文件

bash 复制代码
# 创建文件 example.txt
ed example.txt <<EOF
a
Hello from ed editor.
This is line 2.
This is line 3.
.
1,3p          # 打印第1到3行
s/line/row/g  # 替换所有 "line" 为 "row"
,p            # 打印全部内容
w             # 保存
q             # 退出
EOF

# 查看结果
cat example.txt

📝 输出:

复制代码
Hello from ed editor.
This is row 2.
This is row 3.

⚠️ 说明:

  • a:进入追加模式,. 结束输入
  • 1,3p:打印1到3行
  • s/old/new/g:全局替换
  • w:写入文件
  • q:退出

三、vi 和 Vim 编辑器(重点)

3.1 vi 简介

  • vi(Visual Editor)是 Unix 标准编辑器。
  • vim(Vi IMproved)是其增强版,支持语法高亮、插件、多窗口等。

Vim是vi的增强版,是系统管理员和开发者的必备工具。

  1. vi的工作模式

    • 普通模式(Normal Mode) :启动Vim后的默认模式。在此模式下,按键不是输入文本,而是执行命令(如复制、粘贴、删除、移动光标等)。按 Esc 键可从其他模式返回此模式。
    • 插入模式(Insert Mode) :在此模式下才能输入和编辑文本。从普通模式按 i, a, o 等键进入。
    • 命令行模式(Command-Line Mode) :在普通模式下按 : 键进入。用于执行保存、退出、查找替换等高级操作。
    • 可视模式(Visual Mode) :在普通模式下按 v 进入。用于选择文本块进行操作。
  • CentOS Stream 9 默认安装 vim-minimal,建议安装完整版:
bash 复制代码
sudo dnf install vim-enhanced

3.2 vi 的工作模式

模式 进入方式 功能 退出方式
命令模式 启动即进入 / Esc 执行移动、删除、复制等命令 i/a/o 进入插入模式
插入模式 i(当前位)、a(后)、o(下一行) 输入文本 Esc 返回命令模式
末行模式 命令模式下按 : 保存、退出、查找、设置等 执行命令后自动返回命令模式

✅ 模式切换图示:

复制代码
[命令模式] -- i/a/o --> [插入模式] -- Esc --> [命令模式] -- : --> [末行模式]

3.3 vi 常用命令详解(命令模式下)

➤ 光标移动
命令 功能
h 左移
j 下移
k 上移
l 右移
w 移到下一个单词开头
b 移到上一个单词开头
0 行首
$ 行尾
gg 文件开头
G 文件结尾
5G 跳转到第5行

✅ 示例:快速导航

bash 复制代码
# 在命令模式下:
gg      # 跳到文件开头
10G     # 跳到第10行
$       # 跳到行尾
w       # 跳到下一个单词

➤ 文本编辑
命令 功能
x 删除光标处字符
dd 删除整行
5dd 删除5行
yy 复制当前行
5yy 复制5行
p 粘贴到光标后(下一行)
P 粘贴到光标前(上一行)
u 撤销
Ctrl+r 重做
r+字母 替换光标处字符
cw 删除单词并进入插入模式

✅ 示例:编辑操作

bash 复制代码
# 命令模式下:
dd      # 删除当前行
yy      # 复制当前行
p       # 粘贴到下一行
u       # 撤销删除
Ctrl+r  # 重做

➤ 查找与替换(末行模式)
命令 功能
/pattern 向下查找 pattern
?pattern 向上查找 pattern
n 下一个匹配
N 上一个匹配
:s/old/new 替换当前行第一个 old
:s/old/new/g 替换当前行所有 old
:%s/old/new/g 替换全文所有 old
:5,10s/old/new/g 替换5-10行所有 old

✅ 示例:批量替换

bash 复制代码
# 末行模式下:
:%s/Linux/Unix/g    # 全文替换 Linux 为 Unix
:1,5s/error/ERROR/g # 1-5行替换 error 为 ERROR

➤ 保存与退出(末行模式)
命令 功能
:w 保存
:q 退出(未修改时)
:wqZZ 保存并退出
:q! 强制退出(不保存)
:w! 强制保存(如权限不足)
:w newfile 另存为 newfile

✅ 示例:

bash 复制代码
:wq    # 保存退出
:q!    # 放弃修改强制退出

其他实用命令

shell 复制代码
:set number    # 显示行号 (:set nu)
:set nonumber  # 隐藏行号 (:set nonu)
:set paste     # 进入粘贴模式(避免自动缩进混乱),粘贴后:set nopaste
:r filename    # 将另一个文件的内容读取并插入到当前光标位置

3.4 vi 与 Shell 交互

➤ 在 vi 中执行 Shell 命令(末行模式)
bash 复制代码
:!命令

✅ 示例:

bash 复制代码
:!ls -l          # 列出当前目录
:!date >> %      # 将当前日期追加到当前编辑文件
:r !whoami       # 读取 whoami 命令输出并插入到当前光标处
➤ 从 Shell 启动 vi 并编辑命令输出
bash 复制代码
vi <(command)

✅ 示例:

bash 复制代码
vi <(ps aux)     # 在 vi 中查看进程列表(只读)

3.5 文本格式转换

➤ DOS ↔ UNIX 换行符转换
  • DOS/Windows:\r\n
  • Unix/Linux:\n

✅ 在 vi 中转换:

bash 复制代码
# 查看文件格式
:set ff?

# 转换为 Unix 格式
:set ff=unix
:w

# 转换为 DOS 格式
:set ff=dos
:w

✅ 使用外部命令:

bash 复制代码
# 安装 dos2unix 工具
sudo dnf install dos2unix

# 转换
dos2unix file.txt    # DOS → Unix
unix2dos file.txt    # Unix → DOS

vim 键盘图

四、Emacs 编辑器(简介)

4.1 简介

  • 功能强大的可编程编辑器,支持邮件、日历、调试、终端等。
  • 快捷键以 CtrlAlt(Meta)为主。
  • 启动:emacs filename(图形界面)或 emacs -nw filename(终端)

4.2 基本操作(终端模式)

操作 快捷键
保存 Ctrl+x Ctrl+s
退出 Ctrl+x Ctrl+c
剪切行 Ctrl+k
粘贴 Ctrl+y
查找 Ctrl+s
执行Shell命令 Alt+!

✅ 安装与启动:

bash 复制代码
sudo dnf install emacs
emacs -nw hello.txt   # 终端模式编辑

📝 说明:Emacs 学习曲线较陡,适合深度用户。本书重点在 vi 和 nano。


五、gedit 编辑器(图形界面)

5.1 简介

  • GNOME 桌面环境默认文本编辑器。
  • 支持语法高亮、插件、多标签页、鼠标操作。
  • 仅适用于有图形界面的系统。

5.2 使用方法

✅ 启动:

bash 复制代码
gedit myfile.txt &

✅ 常用功能:

  • Ctrl+S:保存
  • Ctrl+O:打开
  • Ctrl+F:查找
  • Ctrl+H:替换
  • 菜单 → View → Highlight Mode:选择语法高亮(如 Python、Shell)

⚠️ 注意:服务器通常无 GUI,不推荐依赖 gedit。


六、Nano 编辑器(重点)

6.1 Nano 简介及安装

  • 轻量级、易用、适合新手。
  • 默认已安装在大多数发行版,若无:
bash 复制代码
sudo dnf install nano

6.2 启动与退出 Nano

启动

bash 复制代码
nano [文件名]

退出

  • Ctrl+X:退出
  • 若有修改,会提示是否保存:
    • Y:保存
    • N:不保存
    • 输入文件名后回车确认

6.3 Nano 基本操作

底部菜单显示常用快捷键(^ = CtrlM = Alt

功能 快捷键 说明
保存 Ctrl+O Write Out(写入)
搜索 Ctrl+W Where is...
剪切行 Ctrl+K Cut(可连续剪切多行)
粘贴 Ctrl+U Uncut(粘贴剪切板内容)
复制(标记后) Alt+6 Copy(需先标记)
标记开始 Ctrl+6 Set Mark
到行首/行尾 Ctrl+A/Ctrl+E
翻页 Ctrl+Y/Ctrl+V 上一页/下一页
显示行号 Ctrl+C 显示当前行号和总行数
调用帮助 Ctrl+G Get Help

✅ 案例:使用 nano 编辑配置文件

bash 复制代码
nano /tmp/test_nano.txt

在编辑器中操作:

text 复制代码
Hello Nano Editor!
This is line 2.
# 按 Ctrl+K 剪切本行
# 按 Ctrl+U 粘贴
# 按 Ctrl+W 搜索 "Nano"
# 按 Ctrl+O 保存 → 回车确认文件名
# 按 Ctrl+X 退出

✅ 启用行号(临时):

bash 复制代码
nano +5 /tmp/test_nano.txt   # 打开并跳到第5行

✅ 永久启用行号(修改配置):

bash 复制代码
echo "set linenumbers" >> ~/.nanorc

七、综合性实战案例


🎯 案例1:使用 vi 编写并调试 Shell 脚本

任务:编写一个备份脚本,使用 vi 编辑,执行 Shell 命令测试。

bash 复制代码
# 1. 启动 vi 创建脚本
vi backup_script.sh

在 vi 中输入(插入模式):

bash 复制代码
#!/bin/bash
# backup_script.sh - 自动备份指定目录

BACKUP_DIR="/home/user/backup"
SOURCE_DIR="/home/user/documents"

# 创建备份目录
mkdir -p "$BACKUP_DIR"

# 生成带时间戳的压缩包
tar -czf "$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).tar.gz" "$SOURCE_DIR"

echo "✅ 备份完成:$BACKUP_DIR"

保存退出:

bash 复制代码
:wq

添加执行权限并测试:

bash 复制代码
chmod +x backup_script.sh
./backup_script.sh

# 在 vi 中直接执行查看结果
vi backup_script.sh
# 在末行模式执行:
:!ls -l /home/user/backup/

🎯 案例2:使用 nano 快速修改系统配置并重启服务

任务:修改 SSH 端口,使用 nano 编辑,重启服务。

⚠️ 警告:请在测试环境操作,避免断开连接!

bash 复制代码
# 1. 使用 nano 编辑 SSH 配置
sudo nano /etc/ssh/sshd_config

在 nano 中:

  • Ctrl+W 搜索 #Port 22
  • 删除 #,修改为 Port 2222
  • Ctrl+O 保存 → 回车
  • Ctrl+X 退出

重启服务:

bash 复制代码
sudo systemctl restart sshd
sudo systemctl status sshd   # 确认状态

💡 提示:修改端口后,需在防火墙放行:

bash 复制代码
sudo firewall-cmd --add-port=2222/tcp --permanent
sudo firewall-cmd --reload

🎯 案例3:综合使用 vi 与 Shell ------ 批量重命名文件

任务:使用 vi 编辑生成重命名脚本。

bash 复制代码
# 1. 生成待重命名文件列表
ls *.log > rename_list.txt

# 2. 用 vi 编辑 rename_list.txt,转换为 mv 命令
vi rename_list.txt

在 vi 命令模式下:

bash 复制代码
:%s/.log$/.log.bak/      # 将 .log 替换为 .log.bak(目标名)
:%s/^/mv & /             # 在行首添加 "mv "(& 代表匹配内容)
# 此时每行变为:mv file1.log file1.log.bak

保存为脚本:

bash 复制代码
:w rename_script.sh
:q

添加权限并执行:

bash 复制代码
chmod +x rename_script.sh
./rename_script.sh       # 执行批量重命名

验证:

bash 复制代码
ls *.log.bak             # 应显示重命名后的文件

✅ 学习建议与最佳实践

  • 新手推荐 nano:操作直观,减少学习压力。
  • 进阶必学 vim:终端环境下无可替代,效率极高。
  • ed 用于脚本:自动化修改配置文件时很有用。
  • 避免直接编辑生产配置 :先备份(cp file file.bak)。
  • 善用查找替换:%s/old/new/g 是 vim 高效编辑的核心。
  • 多练习模式切换:vim 的精髓在于"不碰鼠标,全键盘操作"。

📚 附录:编辑器快捷键速查表

vi/vim

功能 命令
保存退出 :wqZZ
强制退出 :q!
查找下一个 n
复制5行 5yy
粘贴 p
撤销 u
执行Shell :!ls

nano

功能 快捷键
保存 Ctrl+O
退出 Ctrl+X
搜索 Ctrl+W
剪切行 Ctrl+K
粘贴 Ctrl+U
帮助 Ctrl+G

这份文档覆盖了 Linux 主流文本编辑器的核心语法、操作技巧、实战案例 ,特别强化了 vi/vimnano 的深度使用,所有案例均含详细注释,可直接用于教学、自学或生产环境参考。

相关推荐
van久1 小时前
.Net Core 学习:Razor Pages -- 依赖注入
学习·.netcore
网安老伯1 小时前
什么是网络安全?网络安全包括哪几个方面?学完能做一名黑客吗?
linux·数据库·python·web安全·网络安全·php·xss
tang_vincent1 小时前
Linux虚拟内存固定映射区-fixmap
linux
企鹅侠客1 小时前
Ubuntu本地部署AnythingLLM实现本地文档RAG
linux·运维·ubuntu·llm
Victoria.a1 小时前
Linux环境基础开发工具使用
linux
YangYang9YangYan2 小时前
2026年中专计算机专业证书报考指南:高性价比认证与职业路径规划
大数据·人工智能·学习·计算机视觉
被AI抢饭碗的人2 小时前
linux:进程间通信
linux·运维·服务器
严文文-Chris2 小时前
【半监督学习常见算法】
学习·算法·机器学习
森G2 小时前
六、imx6ull驱动实现
linux·c语言·ubuntu