Linux 操作系统 005-使用vi进行文本编辑

Linux 操作系统 005-使用vi进行文本编辑

本节关键字:Linux、文本编辑、vi、命令模式、字符串替换、字符串查找
本节相关指令:vi

vi的介绍

vi是一款由加州大学伯克利分校,Bill Joy研究开发的文本编辑器。vi是unix/linux操作系统中最经典的文本编辑器,只能是编辑字符,不能对字体、段落进行排版;它既可以新建文件,也可以编辑文件;它没有菜单,只有命令,且命令繁多。虽然vi的操作方式与其他常用的文本编辑器(如gedit)很不相同 ,但是由于其运行于字符界面,并可用于所有unix/linux环境,仍被经常使用。

vi的模式

vi 有三种命令模式:

  • Command (命令)模式
  • Inser(插入)模式
  • Visual(可视)模式

Command(命令)模式,用于输入命令

命令模式是启动vi后进入的工作模式,并可转换为文本编辑模式和最后行模式。在命令模式下,从键盘上输入的任何字符都被当作编辑命令来解释,而不会在屏幕上显示。如果输入的字符是合法的vi命令,则vi就会完成相应的动作;否则vi会响铃警告。

Insert(插入)模式,用于插入文本

文本编辑模式用于字符编辑。在命令模式下输入i(插入命令)、a(附加命令)等命令后进入文本编辑模式,此时输入的任何字符都被vi当作文件内容显示在屏幕上。按Esc键可从文本编辑模式返回到命令模式。

Visual(可视)模式,用于视化的的高亮并选定正文

在命令模式下,按“:”键进入最后行模式,此时vi会在屏幕的底部显示“:”符号年作为最后行模式的提示符,等待用户输入相关命令。命令执行完毕后,vi自动回到命令模式。

为了实现跨平台操作兼容不同类型的键盘,在vi编辑器中无论是输入命令还是输入内容都是用字母键。例如按字母键“i”在文本编辑模式下表示输入字母“i”,如果在命令模式下则表示将工作模式转换为文本编辑模式。

vi的常用快捷键

光标移动

当我们按ESC进入Command模式后,我们可以用下面的一些键位来移动光标:

快捷键说明
j向下移动一行
k向上移动一行
h向左移动一个字符
l向右移动一个字符
ctrl+b向上移动一屏
ctrl+f向下移动一屏
向上箭头向上移动
向下箭头向下移动
向左箭头向左移动
向右箭头向右移动

我们编辑一个文件时,对于 j、k、l和h键,还能在这些动作命令的前面加上数字,比如 3j,表示向下移动3行。

插入模式(文本的插入)
快捷键说明
i在光标之前插入
a在光标之后插入
I在光标所在行的行首插入
A在光标所在行的行末插入
o在光标所在的行的下面插入一行
O在光标所在的行的上面插入一行
s用输入的文本替换光标所在字符
S用输入的文本替换光标所在行
文本内容的删除操作:
快捷键说明
x删除光标处的一个字符
#x删除几个字符,#表示数字,比如3x
dw删除一个单词
#dw删除几个单词,#用数字表示,比如3dw表示删除三个单词
dd删除一行;
#dd删除多个行,#代表数字,比如3dd 表示删除光标行及光标的下两行
d$删除光标到行尾的内容
J清除光标所处的行与下一行之间的换行,行尾没有空格的话会自动添加一个空格。
#J表示合并#(数字)行。
退出保存

在命令模式下按 shift+: 文本底端出现冒号

快捷键说明
:w保存;
:wfilename 另存为filename;
:wq!保存退出;
:wq!filename 注:以filename为文件名保存后退出;
:q!不保存退出;
:x应该是保存并退出,功能和:wq!相同
撤销操作
快捷键说明
u取消最近一次的操作,可以使用多次来恢复原有的操作
U取消所有操作
Ctrl+R恢复对使用u命令的操作
复制操作
快捷键说明
yy复制当前整行的内容到vi缓冲区
p粘贴复制的内容
yw复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词
y$复制光标所在位置到行尾内容到缓存区
y^复制光标所在位置到行首内容到缓存区
#yy例如:5yy就是复制5行
#yw例如:2yw就是复制两个单词

如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区。

内容查找

vi的查找和替换功能主要在末行模式完成:
自上而下的查找
/要查找的字符串,其中/代表从光标所在位置起开始查找,例如:/work
自下而上的查找
?要查找的字符串 例如:?work

内容替换
命令说明
:s/old/new用new替换行中首次出现的old
:s/old/new/g用new替换行中所有出现的old
:#,# s/old/new/g用new替换从第#行到第#行中出现的old
:% s/old/new/g用new替换整篇中出现的old

如果替换的范围较大时,在所有的命令尾加一个c命令,强制每个替换需要用户进行确认,例如:s/old/new/c 或s/old/new/gc

文件恢复

vi在编辑某一个文件时,会生成一个临时文件,这个文件以 .开头并以 .swp结尾。正常退出该文件自动删除,如果意外退出例如忽然断电,该文件不会删除,我们在下次编辑时可以选择一下命令处理:

快捷键说明
O只读打开,不改变文件内容
E继续编辑文件,不恢复.swp文件保存的内容
R将恢复上次编辑以后未保存文件内容
Q退出vi
D删除.swp文件

或者使用vi -r 文件名 来恢复未保存的内容

跳转
快捷键说明
G跳转到最后一行
gg跳转到第一行
n shift+g跳转到指定行,n为行号

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

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

相关文章

2.electron之纯原生js/jquery的桌面应用程序(应用篇)

如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…

叁[3],函数DispImage/DispObj

函数DispImage C形式 LIntExport void DispImage( const HObject& Image, const HTuple& WindowHandle); //参数1: 需显示图片数据 //参数2:窗体的Handle C#形式 public static void DispImage( HObject image, HTuple windowHandle); 函数DispObj …

Linux查询指定时间点段日志Linux查询指定文件

Linux服务器高效查询日志查询文件 Ⅰ、常用几种日志查询语法Ⅱ、常用几种查询语法 Ⅰ、常用几种日志查询语法 #查询某日志前xx行日志 head -n 行数 日志文件名 #查询某日志后xx行日志 tail -n 行数 日志文件名 #查询固定时间点日志(前提是这个时间点确实有日志输出…

智慧工地人工智能信息管理平台源码,建筑工地管理平台源码

智慧工地云平台源码,微服务架构JavaSpring Cloud UniApp MySql 智慧工地是指以物联网、​移动互联网技术为基础,充分应用人工智能等信息技术,通过AI赋能建筑行业,对住建项目内人员、车辆、安全、设备、材料等进行智能化管理&#…

女生未来赋能计划“闪亮她未来”职业启蒙课程走进开江县

为女童未来赋能,”爱小丫闪亮她未来”职业启蒙系列活动经过前期对接与筹备,于2023年12月4日和7日,分别走进甘棠小学与灵岩小学,本次活动由开江县网格员社会工作服务中心“爱小丫女生未来赋能计划”项目志愿者讲师谭顺玲老师为两所…

解决ES伪慢查询

一、问题现象 服务现象 服务接口的TP99性能降低 ES现象 YGC:耗时极其不正常, 峰值200次,耗时7sFULL GC:不正常,次数为1但是频繁,STW 5s慢查询:存在慢查询5 二 解决过程 1、去除干扰因素 从现象上看应用是由于某种…

荣耀时刻丨2023AIoT新维奖揭晓,美格智能荣登企业榜·行业先锋榜

12月15日,由物联网智库、智次方研究院主办,广东省物联网协会、深圳市物联网协会协办,智次方承办的中国AIoT产业年会暨2024年智能产业前瞻洞察大典在深圳顺利举办。 会上公布了“2023AIoT新维奖”系列榜单评选结果,美格智能荣登20…

C# WPF上位机开发(crc校验)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 为了验证数据传输的过程中有没有发生翻转,我们在传输报文的同时一般还会添加一个crc校验。对于modbus协议也是一样,它在数据…

国际教育-微积分试讲讲稿

Substitution for Integration-Notes换元积分法

使用css让图片无限循环旋转360度

描述 本文章小小记录了使用animation属性来设置动画的效果&#xff0c;这里主要讲述如何让一张图片以图片中心为轴旋转360度。以下为实现的一些代码示例 html 这里引入本地的一张图片&#xff0c;并给图片标签定义class类为rotateImg&#xff0c;用于设置css样式。 <img…

【LeetCode】第18题. 四数之和

今日学习的文章链接和视频链接 leetcode题目地址&#xff1a;第18题. 四数之和 代码随想录题解地址&#xff1a;代码随想录 题目简介 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], num…

【SpringBoot】之Mybatis=Plus集成及使用(入门级)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringBoot开发之Mybatis-Plus系列》。&#x1…

MySQL数据存储、索引记录

行格式(每行记录) 行格式(每行记录)&#xff1a; 以记录为单位来向表中插入数据的&#xff0c;这些记录在磁盘上的存放方式也被称为 行格式 或者 记录格式。 InnoDB 存储引擎4种不同类型的 行格式 &#xff0c;分别是 Compact 、 Redundant 、Dynamic 和 Compressed 行格式。组…

git 的使用

git reset详解-CSDN博客 git reset 命令详解 git revert命令详解。-CSDN博客 关于Git分支中HEAD和Master的理解 - 知乎 (zhihu.com) 一文带你精通 Git&#xff08;Git 安装与使用、Git 命令精讲、项目的推送与克隆&#xff09;-CSDN博客 Git 常用操作&#xff08;5&#xff…

SpringMVC上传下载文件解读

知识点 文件上传&#xff08;File Upload&#xff09;&#xff1a; 创建一个控制器方法&#xff0c;使用 MultipartFile 参数来接收上传的文件。在 Spring 配置文件中配置一个 MultipartResolver&#xff0c;常用的实现类是 CommonsMultipartResolver。在 MultipartResolver …

ORDER BY和ROW_NUMBER() OVER (ORDER BY ...)区别?SQL

在 SQL 查询中&#xff0c; ORDER BY 子句用于指定排序的字段以及排序的顺序&#xff08;升序或降序&#xff09;&#xff0c; 而 ROW_NUMBER() OVER (ORDER BY ...) 则用于为每一行分配一个唯一的序号&#xff0c;并且这个序号是基于指定的排序字段和排序顺序计算的。当然&a…

laravel8模块化开发laravel-modules

laravel8模块化开发laravel-modules 在laravel目录下打开git输入两行命令 $ composer require nwidart/laravel-modules $ php artisan module:make Admin 这个Admin就是文件名

day 18二叉树(五)

day18 代码随想录 2023.12.16 1. 513找树左下角的值 这道题很直观的就是想到层序遍历&#xff0c;最后一层的第一个节点值就是我们需要的&#xff0c;而且很偷懒的是&#xff0c;不用判断是不是最后一层&#xff0c;每一层第一个节点值都保存&#xff0c;会覆盖&#xff0c;最…

Mybatis配置-类型别名(typeAliases)

在Java中&#xff0c;类型别名&#xff08;Type Alias&#xff09;是一个用于简化某个类型的名称的方式。它在XML配置中特别有用&#xff0c;可以减少在全限定类名上繁琐的重复输入。例如&#xff1a; <typeAliases><typeAlias alias"Author" type"do…

grep -B指定输出前置行

要在grep命令输出关键字所在行的同时&#xff0c;再输出关键字的上两行&#xff0c;可以使用grep的-B选项来指定前置行数。下面是一个示例的代码&#xff1a; grep -B 2 "Unsuccessful" shyn在这个示例中&#xff0c;我们使用grep命令过滤出包含"Unsuccessful&q…