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 的深度使用,所有案例均含详细注释,可直接用于教学、自学或生产环境参考。

相关推荐
lazy H6 小时前
从入门到日常开发,一篇文章掌握 Git 核心操作
git·后端·学习·github
无人生还别怕7 小时前
如何制作一个linux标准iso镜像
linux·iso·opencloudos·openanolisos
Yana.nice14 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
a11177618 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao18 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
DFT计算杂谈18 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
Zhang~Ling19 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind19 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森19 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
你想知道什么?20 小时前
线性回归-学习笔记
笔记·学习·线性回归