Linux学习之vi文本编辑器的使用

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录

  • vi文本编辑器编辑文本
    • 1. vi介绍
      • 1.1 vi的特点
      • 1.2 vi的工作模式
    • 2. vi的启动与退出
    • 3. vi基本命令
      • 3.1 常用命令分类
      • 3.2 屏幕翻滚命令
      • 3.3 光标定位命令
      • 3.4 光标移动命令
      • 3.5 文本输入与删除
        • 3.5.1 文本的输入insert
        • 3.5.2 文本的删除delete
    • 4. 文本的修改与替换
      • 4.1 文本的修改correct
      • 4.2 文本的替换replace
    • 5. 文本的拷贝与粘贴copy
    • 6. 撤销与重做
    • 7. vi常用末行命令
      • 7.1 字符串搜索
      • 7.2 字符串替换s
      • 7.3 全局命令global
      • 7.4 全局替换
      • 7.5 文件操作与退出命令
      • 7.6 其他常用命令
        • 7.6.1 行编辑命令
        • 7.6.2 执行shell命令
        • 7.6.3 设定vi选项


Linux入门学习系列文章:
Linux学习之系统用户和用户组的使用
Linux学习之系统管理相关内容
Linux学习之创建文件和目录相关内容
Linux学习之删除文件和目录
Linux学习之复制文件和目录
Linux学习之路径、文件和目录的移动和重命名
Linux学习之查看文件内容
Linux学习之vi文本编辑器的使用
Linux学习之查找文件
Linux入门学习指南


vi文本编辑器编辑文本

1. vi介绍

  • Linux文本编辑器有ex、sed、vi和emacs等
  • vi是最基本的文本编辑器
  • vi是visual的缩写
  • vi是所有unix和Linux系统上必配的编辑器
  • 现在Linux上配备的主流的文本编辑器是vi的增强版vim
  • vim是vi improved的简称
  • vi是一个全屏幕文本编辑器,具备文本编辑的所有功能,高效快捷

1.1 vi的特点

  • 编辑功能强大:
    具有高级编辑特性,可通过正则表达式、宏和命令脚本完成复杂编辑,实现智能化和自动化
  • 适用于各种版本的Unix/Linux系统:
    vi是Unix/Linux系统的标准文本编辑器
  • 适用于各种类型的终端:
    对终端设备有广泛的适应性
  • 使用灵活快捷:
    初学者可能觉得命令复杂难度高,但对于熟练掌握后的人来说,就是一个编辑利器

1.2 vi的工作模式

vi有三种工作模式

  • 命令模式command mode:
    输入任何字符都作为命令来解释执行,屏幕上不显示输入内容,命令模式用于完成各种文本修改工作
  • 输入模式insert mode:
    输入的任何字符都将作为文件的内容被保存,并显示在屏幕上,输入模式用于完成文本录入工作
  • 末行模式last line mode:
    也称为ex转义模式,在末行模式下,光标停留在屏幕的最末行,在此接收输入的命令并执行,末行模式用于执行全局性操作,如文件操作、参数设置、查找与替换、拷贝与粘贴、执行shell命令等

2. vi的启动与退出

输入命令进入vi全屏幕编辑环境

vi 文件名

启动过程描述:先建立一个编辑缓冲区,若指定了文件且该文件已存在,则将其内容读到编辑缓冲区中,若指定的文件不存在,则创建此文件,然后将光标定位在第一行第一列的位置上

vi启动后首先进入命令模式,此时可通过vi的编辑命令进行文本的输入和修改

注意:编辑命令只是在修改调入缓冲区中的文本的副本,文本本身不会被修改,编辑完成后,需要用:wq命令将修改后的内容保存到文件中并退出vi才算完成修改,此次运行未对文件做任何修改,则可用:q退出

3. vi基本命令

vi命令相当多,但常用的只有一小部分

3.1 常用命令分类

  • 屏幕翻滚
  • 移动光标
  • 插入与删除
  • 修改与替换
  • 拷贝与粘贴
  • 复原与重复

vi命令不需要配置鼠标和控制键,操作速度更快,效率更高

尽管vi只用字符命令就可以完成所有编辑操作,vi还是提供了键盘的其他控制操作的支持

按键命令模式输入模式末行模式
Home移动光标到行的最前面移动光标到行的最前面移动光标到行的最前面
End移动光标到行的最后面移动光标到行的最前面移动光标到行的最前面
PageDown向下翻页移动光标到行的最前面向下翻找历史命令
PageUp向上翻页移动光标到行的最前面向下翻找历史命令
Delete删除光标位置的字符移动光标到行的最前面移动光标到行的最前面
Insert进入输入模式替换-输入无效
Backspace光标前移一个字符删除光标前的字符删除光标前的字符
Space光标后移一个字符空格空格
Enter光标下移一个字符换行提交命令
上下左右箭头按箭头方向移动光标按键都方向移动光标找历史命令

注:
在命令模式下输入的字符都被vi解释为命令,不在屏幕上显示,若输入的是非法命令则警报
vi区分大小写

以下分类介绍常用vi命令

3.2 屏幕翻滚命令

以下为屏幕翻滚命令的组合键列表

组合键功能
ctrl+u向上翻半屏
ctrl+d向下翻半屏
PageDown向下翻一屏
ctrl+f向下翻一屏,同PageDown
PageUp向上翻一屏
ctrl+b向上翻一屏,同PageUp
[n]z+Enter将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部

3.3 光标定位命令

按键与功能列表

按键功能
Home光标移动至行首
0光标移动至行首,同Home
End光标移动至行尾
$光标移动到行尾,同End
^光标移动至行首第一个非空格字符
[n]G光标移动到第n行,未指定n时移动到末行
[n]I光标移动到第n行,未指定n时移动到首列
H、M、L光标移动到屏幕首、中、尾行行首

3.4 光标移动命令

vi不支持鼠标移动光标,但可以将通过按键进行操作
按键与功能列表

按键功能
按键左下上右光标向左、下、上、右移动一个字符
h、j、k、l光标向左、下、上、右移动一个字符,同箭头键
b、w光标移动到上一个词、下一个词首
e光标移动到词尾
(、)光标移动到句首、句尾
{、}光标移动到段首、段尾

注:光标移动命令前带数字n时表示重复移动n次,如4e表示移动到后面第4个词的词尾

3.5 文本输入与删除

输入文本前先将光标定位到要输入内容的位置,执行插入命令,进入输入模式,处于输入模式时屏幕底部会显示–insert–提示
表示后续的输入都作为文件的输入内容,输入完成后按esc命令返回命令模式

3.5.1 文本的输入insert

插入命令都是单字符命令,可实现在当前光标位置的前、后、行首、行尾、上一行、下一行开始输入
命令如下

按键功能
a或A在光标位置后、行尾后开始插入
i或I在光标位置前、行首前开始插入,i的作用于insert键相同
o或O在光标所在行之后、光标所在行之前的新行开始插入
3.5.2 文本的删除delete

删除文本最简单的方法是将光标移动到要删除的字符上,每按一下x键或者delete键就会删除一个字符,删除文本内容较多时,可用以下命令

按键功能
x或X删除光标处、光标前的字符,x的作用与delete键相同
dd删除光标所在的行
D删除光标右面的文本
J删除当前行尾的换行符,使当前行与下一行合并尾一行
d+定位符 删除从光标位置到指定位置范围内的字符

关于d+参数的常用如下

参数描述
d0或d^删除光标左面的文本,0或^表示行首
d$删除光标右面的文本,$表示行尾
dG删除光标所在行之后的所有行,G表示最后一行
db删除光标处前的字符直到词首,b代表词首
de删除光标处的字符直到词尾,e表示词尾
dw删除光标处的字符直到下一个词的词首,w表示下一个词的词首

注:
命令前带n时表示删除方位扩大n倍,如3dd表示删除3行,2de表示删除从光标开始的两个词

4. 文本的修改与替换

4.1 文本的修改correct

文本修改指改写一部分文本的内容,修改过程描述:先删除指定范围的文本,然后插入新文本,最后esc结束插入
命令如下

命令功能
cc修改光标所在的行
C修改光标处到行尾的文本
c+定位符 修改光标到指定范围内的文本,常用如下:
c0或c^修改光标左面的文本
c$修改光标右面的文本
cG修改光标所在行之后的所有行
cb修改光标处前的字符直到词首
cw修改光标处的字符直到词尾
cl修改光标处的字符

注:
以上命令前带数字表示修改范围扩大n倍,如4cc表示修改从光标所在行开始的4行,3cw表示修改从光标开始的3个词

4.2 文本的替换replace

替换replace指覆盖,是相同长度字符替换,替代substitute指取代,可以相同也可以不同长度内容进行取代

替换命令

命令功能
r用输入的字符替换光标处的字符
R用输入的文本逐个替换从光标处开始的各个字符,直到按下esc键

替代命令

命令功能
s用输入的文本替代光标处的字符,用esc键结束输入,等同于cl
S用输入的文本替代光标所在的行,用esc键结束输入,等同于cc

5. 文本的拷贝与粘贴copy

拷贝指将光标处的文本幅值到一个缓冲区中,类似Windows的剪切板
粘贴指将缓冲区中的内容插入到光标处

命令与功能

命令功能
yy拷贝光标所在行至缓冲区
y+定位符拷贝光标到指定范围内的文本,常用如下:
y0或y^拷贝光标左面的文本
y$拷贝光标右面的文本
yG拷贝光标所在行之后的所有行
yb拷贝光标处的字符直到词首
yw拷贝光标处的字符直到词尾

6. 撤销与重做

撤销undo
消除上一个命令所做的修改,恢复到命令执行前的样子
重做redo
重复执行上一个命令

命令

命令功能
u撤销上一个命令所做的修改
U撤销最近针对一行所做的全部修改,在对一行连续做了多处修改后,可用此命令一次恢复全行
.重复前一个命令

7. vi常用末行命令

命令模式下输入:或/或?字符都将进入末行模式,后续的输入被解释尾行命令,在屏幕末行显示
屏幕输入完成后按Enter键执行,末行命令执行结束后返回命令模式,或退出vi

命令分类:字符串搜索与替换命令、文件操作与退出命令、其他

7.1 字符串搜索

在文件中查找某各字符串可用字符串搜索命令,执行命令后光标会停留在第一个匹配字符串的首字符处
按n或N可移至下一个匹配字符串首,不存在匹配字符串则末行显示"找不到模式"

命令

命令功能
/模式从光标处向后 搜索与指定模式匹配的字符串,按n向后继续找
?模式从光标处向前搜索与指定模式匹配的字符串,按N向前继续找

如查找test字符串,使用命令/test,光标从当前位置移动到后面第一个test的字符的t上,按n移动到下一个test上,当搜索到文件尾时,再按n则返回到文件头继续搜索

7.2 字符串替换s

字符串替换使用s命令,指定的行中搜索与指定模式相匹配的字符串,并用另一个字符串替换他
命令

:[n1,n2]s/p1/p2/[g][c]

参数描述

参数描述
n1,n2表示目标行的行号范围,可以使用%代表所有行,未指定范围时,目标行就是光标所在的当前行
p1用作搜索的字符串模式
p2用作替换的字符串模式
s命令可以带g和c选项
g表示替换目标行中所有匹配的字符串,没有g则只替换目标行中第一个匹配的字符串
c表示替换前要求用户确认
^代表行首
$代表行尾

模式中可以用^代表行首,$代表行尾

7.3 全局命令global

全局命令使用g
在全文中搜索含有与指定模式匹配的字符串的行,对匹配的行做标记
命令格式如下

命令作用
:g/p1搜索所有包含p1字符串模式的行
:g!p1搜索所有不包含p1字符串模式的行

命令作用
:g/test命令将找出所有含有test的行
:g!test命令将找出所有不包含test的行

命令与其他命令联合使用

命令作用
:g/p1/对所有包含p1的行执行指定的命令
:g!p1/对所有不包含p1的行执行指定的命令


p命令显示行,联合使用如下

命令作用
:g/test/p显示所有含有test的行

d命令删除行,联合使用如下

命令作用
:g!test/d删除所有不包含test的行

7.4 全局替换

s命令面向行的字符串替换,可与g命令联合使用
全局替换命令格式
g命令/s命令
表示先用g命令再文件中搜索含有某个模式的行,并做标记,然后用s命令对所有标记的行执行搜索和替换
常用命令如下

命令作用
:g/p1/s/p2/p3/g将文件中所有含有p1的行中的p2用p3替换
:g!p1/s/p2/p3/g将文件中所有不含有p1的行中的p2用p3替换
:g/p1/s//p2/g将文件中所有的p1用p2替换,这里的:g/p1/s//p2/g是:g/p1/s/p1/p2/g的简写,当s命令的搜索模式与g命令的搜索模式相同时,可省略s命令中的搜索模式,命令中//中间没有空格

7.5 文件操作与退出命令

文件操作包括读文件和写文件,读文件是将文件内容读入到编辑缓冲区中,写文件是将编辑缓冲区的内容保存到文件中
退出vi时可选择是否保存文件

常用退出和文件操作命令如下

命令作用
:w [文件名]写入指定文件,若未指定文件则写入当前文件,即vi启动时打开的文件
:q未修改源文件,不保存文件,直接退出
:wq或者:x保存文件并退出
:q!放弃修改,不保存文件,退出
:e!放弃修改,编辑区恢复为文件原样
:e 文件名打开指定的文件,调入编辑区
:r 文件名读入指定的文件,将文件内容插入到光标位置
:f在屏幕末行显示文件相关信息

7.6 其他常用命令

7.6.1 行编辑命令

对指定的行进行编辑,指定行范围时,可用.代表当前行,用$代表最后一行,用%代表所有行
常用行编辑命令如下

命令作用
:n跳至第n行
:n1,n2con3将第n1至n2行之间的内容拷贝到第n3行下,如2,7co$表示将第2行到第7行的文字幅值到文件末尾处
:n1,n2mn将第n1到n2行之间的内容移至第n3行下,如:.m10表示将当前行移动到第10行下
:n1,n2d将第n1到n2行之间的内容删除,如2,7d表示删除第2行到第7行的内容
:p显示当前行的内容,
:nu显示当前行的行号和内容
7.6.2 执行shell命令

使用vi编辑文件时,不退出vi情况下执行shell命令,执行期间vi暂时挂起,待命,执行结束后返回vi继续运行
执行shell命令的格式如下
:! 命令执行指定的shell命令

7.6.3 设定vi选项

可通过设置vi的选项来规定vi的一些外观和行为特性
设定vi选项的方法其中之一是使用set命令
常用如下

命令作用
:set all显示所有选项
:set ai设定自动缩进
:set noai取消自动缩进
:set nu设定行号显示
:set nonu取消行号显示
:set hlsearch设定高亮显示搜索到的字符串
:set nohlsearch取消高亮显示搜索到的字符串
:set ic设定搜索命令中忽略大小写
:set noic取消搜索命令中忽略大小写

感谢阅读,祝君暴富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将div渲染成textarea框,类似于ant design 的TextArea

一 先看效果 原始效果 输入时效果 二 代码如下 1. html 代码 <div className{style.divTextArea} contentEditable"true"></div> 2. Css(Less)代码 .divTextArea {width: 90%;margin-top: 10px;line-height: 28px;min-height: 60px;border: 1px solid …

MySQL有哪些锁?

文章目录 前言一、全局锁1.全局锁是怎么用的&#xff1f;2.全局锁应用场景是什么&#xff1f;3.加全局锁又会带来什么缺点呢&#xff1f;4.既然备份数据库数据的时候&#xff0c;使用全局锁会影响业务&#xff0c;那有什么其他方式可以避免&#xff1f; 二、表级表1.MySQL 表级…

selenium中, quit 和close的区别

close时 """ close和quit的区别 close关闭当前页 (只是关闭了当前) quit离开整个浏览器 &#xff08;走远了&#xff09; """ from selenium import webdriver import time# 创建浏览器驱动对象 from selenium.webdriver.co…

selenium中,怎么判断是否已选多选框

html文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><p>测试勾选</p><div><input type"checkbox" name"b…

js如何实现当文本内容过长时,中间显示省略号...,两端正常展示

前一阵做需求时&#xff0c;有个小功能实现起来废了点脑细胞&#xff0c;觉得可以记录一下。 产品的具体诉求是&#xff1a;用户点击按钮进入详情页面&#xff0c;详情页内的卡片标题内容过长时&#xff0c;标题的前后两端正常展示&#xff0c;中间用省略号...表示&#xff0c…

如何在MySQL中实现upsert:如果不存在则插入?

目录 1 使用 REPLACE 2 使用 INSERT ... ON DUPLICATE KEY UPDATE 使用 INSERT IGNORE 有效会导致 MySQL 在尝试执行语句时忽略执行错误 INSERT 。这意味着 包含 索引或 字段 INSERT IGNORE 中重复值的语句 不会 产生错误&#xff0c;而只是完全忽略该特定 命令。其明显目的是…

CAN总线线束设计与节点布置

CAN总线线束设计与节点布置 设计和布置CAN总线线束时需要考虑的因素常见的 CAN 总线节点布置拓扑结构通过合理节点布置来提高 CAN 总线可靠性在布置 CAN 总线节点时,需要考虑以下几点设计和布置CAN总线线束时需要考虑的因素 在设计和布置CAN总线线束时,需要考虑以下几个因素…

[word] word大括号怎么打两行 #其他#其他#微信

word大括号怎么打两行 Word给用户提供了用于创建专业而优雅的文档工具&#xff0c;帮助用户节省时间&#xff0c;并得到优雅美观的结果。 一直以来&#xff0c;Microsoft Office Word 都是最流行的文字处理程序。 作为 Office 套件的核心程序&#xff0c; Word 提供了许多易…

秒杀优化+秒杀安全

1.Redis预减库存 1.OrderServiceImpl.java 问题分析 2.具体实现 SeckillController.java 1.实现InitializingBean接口的afterPropertiesSet方法&#xff0c;在bean初始化之后将库存信息加载到Redis /*** 系统初始化&#xff0c;将秒杀商品库存加载到redis中** throws Excepti…

golang之Slices操作示例(字符串数组)

1. 声明与长度判断 //字符串数组使用&#xff0c;也叫分片(Slices) var s1 []string fmt.Println("for s1:", s1, len(s1), cap(s1), s1 nil, len(s1) 0) if s1 nil {fmt.Println("空字符串数组(Slices)") } if len(s1) 0 {fmt.Println("字符串…

【YOLOv10】使用 TensorRT C++ API 调用GPU加速部署 YOLOv10 实现 500FPS 推理速度——快到飞起!

NVIDIA TensorRT ™ 是一款用于高性能深度学习推理的 SDK&#xff0c;包含深度学习推理优化器和运行时&#xff0c;可为推理应用程序提供低延迟和高吞吐量。YOLOv10是清华大学研究人员近期提出的一种实时目标检测方法&#xff0c;通过消除NMS、优化模型架构和引入创新模块等策…

平稳交付 20+ 医院,卓健科技基于 OpenCloudOS 的落地实践

导语&#xff1a;随着数字化转型于各个行业领域当中持续地深入推进&#xff0c;充当底层支撑的操作系统正发挥着愈发关键且重要的作用。卓健科技把 OpenCloudOS 当作首要的交付系统&#xff0c;达成了项目交付速度的提升、安全可靠性的增强、运维成本的降低。本文将会阐述卓健科…

【转】ES, 广告索引

思考&#xff1a; 1&#xff09;直接把别名切换到上一个版本索引 --解决问题 2&#xff09;广告层级索引如何解决&#xff1f; -routing、join 3&#xff09;查询的过程&#xff1a;query and fetch, 优化掉fetch 4&#xff09;segment合并策略 5&#xff09;全量写入时副…

gcc与g++的原理

程序的翻译 1 快速认识gcc/g2 程序翻译的过程2.1 预处理阶段2.2 编译阶段2.3 汇编阶段2.4 链接阶段 3 动静态库 1 快速认识gcc/g 首先我们需要在linux系统中安装对应的编译器gcc/g&#xff0c;安装命令如下&#xff08;centos7环境下&#xff09;&#xff1a; gcc: yum instal…

什么是哈希冲突?如何解决哈希冲突?HashMap和TreeMap之间的区别?

Map 和 Set 的概念 Map和Set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关 。 为什么说它是一种专门用来进行搜索的数据结构呢&#xff1f; 我们应该都用过“遍历查找”、“二分查找”&#xff0c;这两种方式也都是用来对目标…

Spring Security系列之PasswordEncoder

概述 任何一个登录系统的密码不能明文存储&#xff0c;万一发生数据库泄漏事故&#xff08;不管是内部人员导出数据库数据还是被黑客攻击破解数据库实例节点拿到数据库数据等&#xff0c;又或者是其他情况造成的&#xff09;&#xff0c;将产生巨大的损失。因此明文密码在存储…

DOS 操作系统

DOS 介绍 DOS&#xff1a;disk operating system&#xff0c;磁盘操作系统。 中国DOS联盟下载 MS-DOS 7.10完整安装版&#xff08;含图形安装程序&#xff09; DOS 环境下的操作 输入部分内容后按下 Tab 可以快速自动补全。 按住 Ctrl 键可以用鼠标滚轮改变字号大小。 DO…

【数据结构初阶】--- 顺序表

顺序表&#xff0c;好像学C语言时从来没听过&#xff0c;实际上就是给数组穿了层衣服&#xff0c;本质是一模一样的。 这里的顺序表实际是定义了一个结构体&#xff0c;设计各种函数来实现它的功能&#xff0c;比如说数组中的增删改查插入&#xff0c;这些基本操作其实平时就会…

Log4j日志级别介绍

Log4j 是一个广泛使用的 Java 日志记录框架&#xff0c;提供了多种日志级别&#xff0c;用于控制日志输出的详细程度。每个日志级别代表一种特定的重要性和紧急程度。 以下是 Log4j 的常见日志级别及其解读&#xff1a; FATAL&#xff08;致命&#xff09; 解释&#xff1a;表…

【报错解决】深度学习模型训练时cuda内存足够但测试时反而报错cuda out of memory

报错描述 报错的代码如下&#xff1a; model reader(configargs, encoderencoder)#初始化模型 model.to(cuda)#把模型放到gpu上 model.load_state_dict(torch.load(join(args.checkpoint_path, best_ckpt_model1.pkl)))#加载模型参数 model torch.nn.DataParallel(model)#并…