Linux Vi/Vim使用 ⑥
掌握 CentOS 7 下的 Vi/Vim 编辑器:从安装到精通
在 CentOS 7 系统的日常运维、编程开发以及各类文本处理场景中,Vi/Vim 编辑器都是不可或缺的得力工具。它以轻量、高效、功能强大著称,虽然初次上手有一定学习门槛,但掌握之后便能大幅提升工作效率。今天,咱们就从安装讲起,一步步深入 Vi/Vim 的奇妙世界,借助丰富的代码案例,让你轻松上手。
一、安装 Vim 编辑器
CentOS 7 默认预装了基础版的 Vi,但为了享受更多高级功能,我们通常会选择安装功能更完备的 Vim。安装过程非常简单,利用系统自带的软件包管理工具 yum 即可快速搞定。
打开终端,输入以下命令:
yum install vim -y
这里,yum
是 CentOS 7 系统中强大的包管理器,负责软件的安装、更新与卸载;install
是 yum
命令的一个关键子命令,明确告知系统要执行安装操作;vim
自然就是我们的目标软件包名称;-y
参数很贴心,它的作用是自动应答所有安装过程中的确认提示,让安装一气呵成,无需手动逐个确认,大大节省时间。
安装完成后,输入 vim --version
来验证安装情况,你会看到类似如下的版本信息输出:
VIM - Vi IMproved 7.4.160 (2016 Aug 10, compiled Aug 2 2017 03:49:32)
Included patches: 1-160
Modified by <bugzilla@redhat.com>
Compiled by <bugzilla@redhat.com>
...
看到这些信息,就说明 Vim 已经成功入驻你的系统啦。
以下是为你补充了 vi
和 vim
操作参数表格的内容,方便更清晰对比和查看相关操作:
vi
和 vim
常用操作参数表格
操作分类 | 操作描述 | vi 命令格式示例 | vim 命令格式示例 | 说明 |
---|---|---|---|---|
启动编辑器 | 打开已有文件 | vi /etc/hosts | vim /etc/hosts | /etc/hosts 可替换为实际要编辑的文件路径,vi 为基础版,vim 功能更丰富 |
新建文件 | vi new_file.txt | vim new_file.txt | 创建名为 new_file.txt 的新空白文件,按需替换文件名 | |
退出编辑器 | 正常保存并退出 | :wq (先按 Esc 进入命令模式后输入) | :wq (先按 Esc 进入命令模式后输入) | 保存文件内容并关闭编辑器 |
不保存直接退出 | :q! (先按 Esc 进入命令模式后输入) | :q! (先按 Esc 进入命令模式后输入) | 强制忽略未保存修改,直接关闭编辑器 | |
只保存不退出 | :w (先按 Esc 进入命令模式后输入) | :w (先按 Esc 进入命令模式后输入) | 仅保存当前文件内容,可继续编辑 | |
光标移动(命令模式) | 移到文件开头 | gg | gg | 快速将光标定位到文件首行开头位置 |
移到文件末尾 | G | G | 快速将光标定位到文件最后一行开头位置 | |
移到指定行(如第 n 行) | nG | nG | 将光标定位到指定的第 n 行开头,n 为具体行数数字 | |
向左移动光标 | h | h | 按一次光标向左移动一个字符位置 | |
向下移动光标 | j | j | 按一次光标向下移动一个字符位置 | |
向上移动光标 | k | k | 按一次光标向上移动一个字符位置 | |
向右移动光标 | l | l | 按一次光标向右移动一个字符位置 | |
文本删除(命令模式) | 删除单个字符 | x | x | 将光标移到要删除的字符上,按下此键删除该字符 |
删除整行 | dd | dd | 将光标移到要删除的行,按下此键删除整行内容 | |
文本复制粘贴(命令模式) | 复制一行 | yy | yy | 将光标移到要复制的行,按下此键复制该行内容 |
粘贴 | p | p | 将光标移到目标粘贴位置,按下此键粘贴已复制的内容 | |
插入模式进入(命令模式切换) | 在光标当前位置插入文字 | 按 i 键 | 按 i 键 | 进入插入模式,可在光标所在位置开始输入文字,按 Esc 键返回命令模式 |
在光标后面位置插入文字 | 按 a 键 | 按 a 键 | 进入插入模式,在光标后开始输入文字,按 Esc 键返回命令模式 | |
在当前行下方新开一行并插入文字 | 按 o 键 | 按 o 键 | 进入插入模式,在当前行下方新开一行用于输入文字,按 Esc 键返回命令模式 | |
末行模式操作(命令模式切换) | 保存并退出 | :wq | :wq | 先按 : 键进入末行模式,再输入此命令保存并退出编辑器 |
查找替换(全局) | :%s/要替换的内容/替换后的内容/g | :%s/要替换的内容/替换后的内容/g | 先按 : 键进入末行模式,如将文件内所有 the 替换成 a 可输入 :%s/the/a/g ,回车执行替换操作 | |
查找替换(指定行) | :n s/要替换的内容/替换后的内容/g (n 为行数) | :n s/要替换的内容/替换后的内容/g (n 为行数) | 先按 : 键进入末行模式,如替换第 3 行的 the 可输入 :3s/the/a/g ,回车执行替换操作 |
通过这个表格,可以更直观地对比 vi
和 vim
在相同操作类型下的命令格式,有助于更快速准确地在不同场景下使用它们进行文本编辑操作。同时结合前面文档中详细的文字描述和案例讲解,相信能更好地掌握这两个编辑器的使用方法哦。
希望这份补充内容符合你的需求,要是还有其他想添加或者修改的地方,可以继续向我提问呀。
二、Vi/Vim 编辑器的启动与退出
(一)启动编辑器
要打开一个已有的文件,比如编辑 /etc/hosts
文件(这可是系统网络配置的关键文件,修改时要倍加小心),在终端敲下:
vim /etc/hosts
或者
vi /etc/hosts
要是想用基础版的 Vi,把 vim
换成 vi
就行。文件瞬间在编辑器窗口中打开,光标稳稳落在首行开头,等待你大展拳脚。
要是想新建一个文件,例如记录日常学习笔记,创建一个名为 learning_notes.txt
的文件,只需输入:
vim learning_notes.txt
或者
vi learning_notes.txt
编辑器马上新建一个空白文档,准备好迎接你的文字。
(二)退出编辑器
退出环节有好几招,各有各的妙处。
正常保存并退出:精心编辑完 learning_notes.txt
,想保存成果并潇洒离场,先按下键盘上的 Esc
键,确保进入命令模式,接着输入 :wq
然后回车。这里的 :w
代表 write
,意思是保存文件内容;q
表示 quit
,就是退出编辑器,二者联手实现完美收官。操作示例如下:
# 编辑完毕,按下 Esc 键
: wq
# 回车,文件保存,编辑器关闭
不保存直接退出:要是觉得这次编辑不太满意,改动都不想要了,按下 Esc
键进入命令模式,紧接着输入 :q!
回车。注意这个 !
,它起着强制的作用,让编辑器无视那些未保存的修改,强行退出。演示如下:
# 按下 Esc 键进入命令模式
: q!
# 回车,编辑器直接关闭,修改未保存
只保存不退出:编辑到一半,担心电脑出状况丢了辛苦写的内容,想先存个档?按 Esc
键进入命令模式,输入 :w
回车就行。操作如下:
# 编辑中途,按下 Esc 键
: w
# 回车,文件保存,可继续编辑
三、深入探索三种模式
Vi/Vim 编辑器最精妙之处在于其三模式设计:命令模式、插入模式、末行模式,灵活切换、熟练运用是掌握它的关键。
(一)命令模式(Command Mode)
这是打开 Vi/Vim 编辑器的默认模式,掌管着光标移动、文本删改、复制粘贴等诸多本领。
- 光标移动操作:
假设正在编辑test.txt
文件,内容如下:
The quick brown fox jumps over the lazy dog.
Another line for testing cursor movement.
最直观的,你能用键盘上的方向键操控光标走向;同时,还有一套高效的快捷键——h
(向左移动光标)、j
(向下移动光标)、k
(向上移动光标)、l
(向右移动光标)。要是光标在首行开头,想快速移到首行末尾,连按 l
键就行:
# 光标处于首行开头
l
l
l
l
l
l
l
l
l
l
# 光标移至 'dog.' 的 '.' 位置
要是想迅速回到文件开头,按下 gg
;想直达文件末尾,按 G
;要是想去指定行,比如第 3 行,输入 3G
就行。
- 文本删除操作:
碰上文件里有多余字符或行要清理的时候,这些操作就派上用场了。
删除单个字符,把光标移到目标字符上,按下x
键。比如说想删去第二行的r
字符:
# 移动光标到第二行 'r' 字符位置
x
# 该行变为 'Another line fo testing cursor movement.'
要是一整行都多余,把光标移到该行,按 dd
键就能删除整行。要是觉得第二行没用了,操作如下:
# 移动光标到第二行
j
# 按 dd 键删除该行
dd
# 文件就剩一行:The quick brown fox jumps over the lazy dog.
- 文本复制粘贴操作:
想复制一行内容,先把光标移到该行,按下yy
键;粘贴的时候,把光标移到目标位置,按p
键就行。比如复制首行,贴到文末:
# 移光标到首行
gg
# 按 yy 复制首行
yy
# 移光标到文末
G
# 按 p 粘贴
p
# 文件内容变成:
# The quick brown fox jumps over the lazy dog.
# The quick brown fox jumps over the lazy dog.
(二)插入模式(Insert Mode)
从命令模式按下特定按键,就能进入这个自由输入文字的模式。
想在光标当前位置插入文字,按下 i
键。要是文件里 test
拼成了 tset
,移光标到 s
后,按 i
键输入 e
修正,再按 Esc
回命令模式:
# 移光标到 's' 后
i
# 输入 'e'
e
# 按 Esc,单词变回 'test'
要是想在光标后面位置插入文字,按 a
键。比如想在 The
和 quick
间加 very
,移光标到 The
后空格,按 a
键输入 very
,按 Esc
回命令模式:
# 移光标到指定位置
a
# 输入'very'very
# 按 Esc,变为 'The very quick brown fox jumps over the lazy dog.'
要是想在当前行下方新开一行并插入文字,按下 o
键。假设文件最后一行写完了,想新开一行写总结,移光标到末行,按 o
键,输入总结内容,再按 Esc
回命令模式:
# 移光标到末行
# 按 o 键新开一行
o
# 输入总结内容,例如 'This is the end of the text.'
This is the end of the text.
# 按 Esc 完成操作
(三)末行模式(Last Line Mode)
在命令模式下按下 :
键,就进入了这个用于执行关键操作的末行模式。
保存文件与退出编辑器的操作咱们前面提过了,再来说说查找替换功能。
假设 test.txt
文件里多次出现 the
,想把它们全换成 a
,在命令模式下按下 :
键进入末行模式,输入 :%s/the/a/g
回车。这里,%
表示针对整个文件;s
是 substitute
的简写,意为替换;the
是要被替换的内容;a
是替换后的内容;g
表示全局替换,要是不加 g
,只替换每行第一个匹配项。操作如下:
# 在命令模式下按 : 键进入末行模式
:
# 输入查找替换命令,然后回车
:%s/the/a/g
# 文件里所有 'the' 都被替换成 'a'
要是只想替换指定行内的内容,比如只替换第 2 行的 the
,输入 :2s/the/a/g
回车就行。
四、总结与练习
Vi/Vim 编辑器功能远不止这些,咱们今天学的只是冰山一角。初次接触可能觉得模式切换有点绕,但多练习、多实操,形成肌肉记忆,很快就能得心应手。
以下是一个综合练习案例,涵盖了前面所讲的 Vi/Vim 编辑器的相关知识点:
练习案例
现有一个名为 practice.txt
的文本文件,内容如下:
The beautiful flower grows beside the small path.
There are many stones on the path.
The color of the flower is red.
请按照以下要求对该文件进行操作:
- 启动 Vim 编辑器打开
practice.txt
文件。 - 将光标快速移动到文件末尾,然后再移动回文件开头。
- 删除第二行整行内容。
- 复制第三行内容,并粘贴到第一行下方。
- 在第一行 “The” 和 “beautiful” 之间插入单词 “very”。
- 进入末行模式,将文件中所有的 “the” 替换成 “a”(全局替换)。
- 保存文件并退出编辑器。
操作步骤及答案
- 启动 Vim 编辑器打开
practice.txt
文件:
在终端输入以下命令:
vim practice.txt
- 将光标快速移动到文件末尾,然后再移动回文件开头:
进入编辑器后,按G
键可将光标快速移动到文件末尾;再按gg
键,就能将光标移动回文件开头。 - 删除第二行整行内容:
先通过按j
键将光标移动到第二行(也可以使用其他光标移动快捷键组合来定位),然后按下dd
键,即可删除第二行整行内容。此时文件内容变为:
The beautiful flower grows beside the small path.
The color of the flower is red.
- 复制第三行内容,并粘贴到第一行下方:
将光标移动到第三行(可以使用3G
等方式快速定位),按下yy
键复制该行内容;接着将光标移动到第一行末尾(可以通过多次按l
键或者使用其他合适的光标移动操作),按下p
键进行粘贴。此时文件内容变为:
The beautiful flower grows beside the small path.
The color of the flower is red.
The color of the flower is red.
- 在第一行 “The” 和 “beautiful” 之间插入单词 “very”:
将光标移动到第一行 “The” 后的空格处,按下i
键进入插入模式,接着输入 “very”,再按Esc
键返回命令模式。此时第一行内容变为 “The very beautiful flower grows beside the small path.”,文件整体内容如下:
The very beautiful flower grows beside the small path.
The color of the flower is red.
The color of the flower is red.
- 进入末行模式,将文件中所有的 “the” 替换成 “a”(全局替换):
在命令模式下按下:
键进入末行模式,输入:%s/the/a/g
回车,即可完成全局替换操作。此时文件内容变为:
A very beautiful flower grows beside a small path.
A color of a flower is red.
A color of a flower is red.
- 保存文件并退出编辑器:
按下Esc
键确保处于命令模式,然后输入:wq
回车,就可以保存文件并退出 Vim 编辑器了。
通过这个练习案例,可以对前面所学的 Vi/Vim 编辑器的启动、光标移动、文本删除、复制粘贴以及末行模式下的查找替换、保存退出等知识点进行巩固练习,希望大家可以多多练习,熟练掌握 Vi/Vim 编辑器的使用哦。
相关文章:
Linux Vi/Vim使用 ⑥
掌握 CentOS 7 下的 Vi/Vim 编辑器:从安装到精通 在 CentOS 7 系统的日常运维、编程开发以及各类文本处理场景中,Vi/Vim 编辑器都是不可或缺的得力工具。它以轻量、高效、功能强大著称,虽然初次上手有一定学习门槛,但掌握之后便能…...

JCR一区牛顿-拉夫逊优化算法+分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测
JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测 目录 JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.中科院…...
easyExcel实现表头批注
背景: 网上大部分都不能直接使用,为此总结一个方便入手且可用的工具,用自定义注解实现 依赖包: <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>…...
Pytest测试用例使用小结
基础使用 Pytest 测试用例实现代码 import pytest from server.service import Servicepytest.fixture def service():return Service(logger)class TestService:classmethoddef setup_class(cls):"""初始化设置一次:return:"""logger.info(&q…...
LeetCode题练习与总结:132 模式--456
一、题目描述 给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。 如果 nums 中存在 132 模式的子序列 &a…...

IdentityServer4框架、ASP.NET core Identity
OAuth2.0 IdentityServer4 官网 中文官网 ASP.NET Core Identity提供了一个用来管理和存储用户账户的框架. IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现。 IdentityServer是一个中间件,它可以添加符合OpenID…...

【分子材料发现】——GAP:催化过程中吸附构型的多模态语言和图学习(数据集处理详解)(二)
Multimodal Language and Graph Learning of Adsorption Configuration in Catalysis https://arxiv.org/abs/2401.07408Paper Data: https://doi.org/10.6084/m9.figshare.27208356.v2 1 Dataset CatBERTa训练的文本字符串输入来源于Open Catalyst 2020 (OC20…...
SpringBoot开发过程中经常遇到问题解决方案分享
目录 1. Spring Boot应用启动缓慢 2. 数据库连接池配置问题 3. Spring Boot应用无法连接外部服务 4. 配置文件读取不生效 5. Spring Boot应用的日志输出不完整 6. Spring Boot中的Transactional事务管理问题 1. Spring Boot应用启动缓慢 问题原因: Spring Boo…...

AR眼镜_消费级工业AR智能眼镜主板硬件解决方案
AR眼镜的研发是一项复杂的软硬件集成工程,它需要在摄影、音频、交互和连接等多个方面提供卓越的基础体验,因此产品的每个细节都显得尤为重要。 在设计AR眼镜时,重量、体积和散热性能都是必须认真考量的关键因素。在芯片平台的选择上ÿ…...
Springboot 核心注解
Spring Boot 是一个基于 Spring 框架的扩展,旨在简化新 Spring 应用的初始搭建以及开发过程。它通过自动配置和约定优于配置的原则,减少了开发者的工作量。Spring Boot 提供了一组核心注解和 Starter 依赖管理工具来帮助开发者快速启动项目。 1. Spring…...

Nacos集群搭建【Oracle作外部数据源】
一、知识点分析 1.Nocas是什么? Nacos是一个动态服务发现、配置管理和服务管理平台。 1.1定义与背景: Nacos,全称为Dynamic Naming and Configuration Service,是由阿里巴巴开源的云原生应用配套工具。它旨在简化微服务架…...

云轴科技ZStack出席中国电信国际EMCP平台香港发布会,持续推动海外合作
近日,以“云聚未来 翼起新篇”为主题的中国电信国际多云服务一站式平台(E-surfing Managed Cloud Platform,简称EMCP平台)新闻发布会在香港成功举办,标志着中国电信国际在云计算服务领域取得了又一重大进展。云轴科技…...

爬虫自动化之drissionpage+SwitchyOmega实现随时切换代理ip
本文介绍了如何使用DrizzlePage进行爬虫自动化,并重点讲解了首次启动时设置代理IP以及通过SwitchyOmega插件实现随时切换代理IP的方法。 安装一次,后面调用就不会再去安装了 下载地址:https://github.com/FelisCatus/SwitchyOmega/releases 这两个文件随便那个都可以,下载…...
docker安装kettle(PDI)并实现web访问
我是MAC电脑M1版本,希望把软件交给docker进行管理,最近公司同事都通过kettle来实现外部数据对接,所以我本地也有安装kettle需求,在网上找到了这个解决方案操作很简单,但出现了无法访问的情况。我的排查方式是ÿ…...

[软件工程]十.可靠性工程(reliable engineering)
1.什么是可靠性工程 我们希望软件在给定的时间内,运行的时候不会崩溃或者发生失效,同时能保护我们的数据和个人信息。我们要能够信任我们所使用的软件,这意味着软件必须是可靠的。可靠性(reliability):系统…...
【Makefile】编译日志之输出重定向符号 >
用法1 make all >& compilelog.txt make all > compilelog.txt这两个编译命令在功能上有一些细微的区别,主要在于标准输出和标准错误的处理方式。 make all >& compilelog.txt 这个命令会将标准输出(stdout)和标准错误&a…...
linux之less
less命令是Linux系统中一个功能强大的文件查看工具,它允许用户分页查看文件内容,并提供了多种快捷键和选项来增强用户体验。以下是less命令的一些常用操作: 基本使用 查看文件使用less命令的基本语法是less [选项] [文件名]。例如࿰…...

算法-字符串-165.比较版本号
一、题目 二、思路解析 1.思路: 比较的是两个版本号它们以“.”作为分割的部分的有效值(即数值)是否一致 2.常用方法: 1.s.split("\\规则"),将字符串按参数规则进行分割并存储在字符串数组中 String[] str …...
List与Set、数组与ArrayList、ArrayList与LinkedList的区别
List 与 Set 的区别: 项ListSet重复允许重复的对象(多个null也可以)不允许重复的对象(null也只能有一个)有序性有序的。 保持了每个元素的插入顺序。即输出顺序就是输入顺序。 有序和无序都有。 HashSet:无…...

如何在 Odoo18 视图中添加关联数据看板按钮 | 免费开源ERP实施诀窍
文 / 开源智造 Odoo亚太金牌服务 引言 关联数据看板按钮乃是 Odoo 当中的一项强效功能,它容许用户顺遂地访问相关记录,或者直接从模型的表单视图施行特定操作。它们为用户给予了对重要信息的疾速访问途径,并简化了工作流程,由此…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...