学习shell与shell编程 vi与vim

news2024/11/14 18:22:00

Linux配置文件都是以ASCII的纯文本形式存在。

为什么学习vi

1)UnixLike系统都会内置vi文本编辑器,其他的文本编辑器则不一定存在

2)许多软件的编辑接口都会主动调用vi

3)vi具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性

4)程序简单,编辑速度相当快

什么是vim

vim是vi的高级版本,vim可以以颜色或底线等方式来显示一些特殊的信息。

vim可以依据文件的扩展名或者文件内的开头信息判断该文件的内容,从而自动调用

改程序的语法判断。再以颜色来显示程序和一般信息。也就是说vim是个程序编辑器

vim里面提供了很多额外的功能,例如

1.支持正则表达式的查找框架

2.多文件编辑

3.块复制

vi的使用

1.一般模式

直接使用vi打开文件,就是一般模式。

可以使用上下左右按键来移动光标

可以删除字符和整行

可以复制黏贴数据

无法编辑

2.编辑模式

i I a A o O r R按键之后可以进入编辑模式。

这时候,界面左下角会出现INSERT或REPLACE的字样,此时才可以进行编辑。

通过Esc按键可以退出编辑模式,回到一般模式

3.命令行模式

在一般模式中,输入: /  ?中的任意一个按钮,就可以将光标移动到最下面那一行。

可以用于

1)查找数据

2)读取

3)保存

4)大量替换字符

5)离开vi

6)显示行号

 

查看文件的默认权限

我们查看权限的时候

ubuntu@ubuntu:~$ pwd
/home/ubuntu
ubuntu@ubuntu:~$ umask
0002
ubuntu@ubuntu:~$ 

1)通过直接输入umask,就可以看到数字形态的权限设置分数

0002:第一个数字是特殊权限用的,我们先不要理他

后面三个数字分别代表:user、group、other(其他组)

文件的默认权限:

若用户创建文件,那么默认没有执行权限,即只有rw 两个权限。最大值为666

所以本例子中的文件实际权限为664

若用户创建文件夹,那么,由于可不可以进入文件夹和x有关,所以默认值为777

所以本例子中的文件夹实际权限为775

umask分数就是指的是默认值需要剪掉的权限

2)umask -S 

直接以符号的形式显示出权限

ubuntu@ubuntu:~$ umask -S
u=rwx,g=rwx,o=rx

创建文件和文件夹权限确认

ubuntu@ubuntu:~$ touch test.txt
ubuntu@ubuntu:~$ ls -lh test.txt
-rw-rw-r-- 1 ubuntu ubuntu 0 Jan 23 18:48 test.txt
ubuntu@ubuntu:~$ mkdir test
ubuntu@ubuntu:~$ ls -l |grep test
drwxrwxr-x  2 ubuntu ubuntu 4096 Jan 23 18:49 test
-rw-rw-r--  1 ubuntu ubuntu    0 Jan 23 18:48 test.txt

按键说明

1)移动光标

hjkl:左下上右

Ctrl+f:向下移一页

Ctrl+b:  向上移一页

Ctrl+d: 向下移半页

Ctrl+u:向上移半页

+ 光标移动到非空格符的下一行

- 光标移动到非空格符的上一行

n<space> 光标向右移动n个字符

0或home键:这一行的最前面字符(常用)

$或end键: 这一行的最后面字符(常用)

H:最上方的那一行的第一个字符

M:中间的那一行的第一个字符

L:光标移动到最下方那一行的第一个字符

G:移动到这个文件的最后一行(常用)

nG:移动到这个文件的第n行(常用)。

gg:移动到文件的第一行(常用)

N[Enter]:光标向下移动N行(常用)

2)在vi中按u可以撤销一次操作

u:撤销上一步的操作
Ctrl+r: 恢复上一步被撤销的操作

3)查找与替换(重点掌握)

/word:向下寻找一个名为word的字符串。

?word:向上寻找名为word的字符串。

n:重复上一个查找的动作

N:方向进行上一个查找动作

:n1,n2s/word1/word2/g(常用)

:1,$s/word1/word2/g(常用)

:1,$s/word1/word2/gc(常用) 

    y  确认执行这个替换

    n  取消这个替换

   a 执行所有替换且不再询问

   q 退出且不做任何改动

   l  替换完匹配点后退出

   Ctrl + E 向上翻滚一行

   Ctrl+ Y  向上翻滚一行

删除赋值黏贴

x 向后删除一个字符(常用)

X 向前删除一个字符 (常用)

nx先后删除n个字符

dd 删除光标所在行(常用)

ndd 光标所在的向下n行(常用)

d1G  删除光标所在行到第一行的所有数据(常用)

dG 删除光标所在行到最后一行的所有数据(常用)

d$ 删除光标所在处到该行的最后一个字符

d0 删除光标所在处到该行的最前面的一个字符

yy 复制光标所在的那一行(常用)

nyy 复制光标所在的向下n行(常用)

y1G 复制光标所在行到第一行的所有数据

yG 复制光标所在行到最后一行的所有数据

y0 复制光标所在处的字符到该行行首的所有数据

y$ 复制光标所在的那个字符到该行捍行尾所有数据

p 将已复制的数据在光标下一行粘贴

P 将已复制的数据在光标的上一行粘贴

移动光标的方法

J 将光标所在行与下一行的数据结合成同一行

c 重复删除多个数据,向下删除10行【10cj】

一般模式切换到编辑模式可用按钮说明

i I 

进入插入模式,i为从目前光标所在处插入;

I为目前所在行的第一个非空格符处开始插入(常用)

a A

进入插入模式,a为从目前光标所在的下一个字符处开始插入;

A为从光标所在行的最后一个字符处开始插入(常用)

o O

进入插入模式,o为在目前光标所在的下一行处插入新的一行;

O为在目前光标所在出的上一行出入新的一行(常用)

r R

进入替换模式, r只会替换光标所在的那一个字符一次;

R会一直替换光标所在的文字,直到按下【Esc】为止。(常用)

一般模式切换到命令行模式

:w 将编辑的数据写入磁盘文件中(常用)

:w! 若文件属性为“只读”时,强制写入该文件。不过,到底能不能

写入和你对该文件的文件权限相关

:q 离开vi(常用)

:q! 若曾修改过文件,又不想存储,使用“!”,为强制离开不保存

!在vi中经常带有“强制”意思

:wq 保存后离开,若为wq!强制保存后离开

ZZ  文件没有改动,则不保存离开,若文件已经被更改,则保存后离开

:w [filename] 将编辑的数据保存为另一个文件(类似另存文件的意思)

:r [filename] 在编辑的数据中,读入另外一个文件的数据,

即将filename这个文件内容加到光标所在行后面

:n1,n2 w [filename] 将n1到n2的内容保存成filename这个文件

:! command 暂时离开vi到命令行模式下执行command的显示结果。

vim环境的更改

:set nu 显示行号,设置之后,会在每一行的前缀显示该行的行号

:set nonu 取消行号

特别注意 vi中,数字是很有意义的,数字通常代表重复做几次的意思。也有可能是代表去到

第几个什么什么的意思

50dd: 删除50行

50j: 向下移动50行

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

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

相关文章

webgl纹理贴图机制

文章目录前言纹理图片大小规范纹理坐标系统贴图流程JavaScript部分齐次坐标—uv坐标数据准备加载外部纹理图像纹理配置加载着色器部分顶点着色器片元着色器完整示例使用多张纹理着色器接受两个纹理单元封装纹理配置赋值函数完整示例总结前言 在计算机图形学中&#xff0c;为了…

HTML+CSS+JS制作炫酷【烟花特效】

文章目录制作炫酷烟花特效一、普通烟花(分散形)HTML代码CSS代码JS代码二、圆形烟花HTML代码CSS代码JS代码三、爱心形烟花HTML代码CSS代码JS代码四、源码获取在线下载制作炫酷烟花特效 &#x1f4a1;本篇内容使用htmlcssjs制作鼠标点击出现烟花效果&#xff0c;分别介绍了分散型…

python-测试代码

1. 测试函数get_name.pydef combination(first, last):将姓名组合在一起name first lastreturn name.title()hello_world.pyfrom get_name import combinationprint("Enter q to quit!") while True:first input(Please input your first name: )if first q:b…

理光Aficio MP C2500扫描到文件夹设置方法

首先在需要接收扫描文件的电脑上设置共享文件夹。 注&#xff1a; &#xff08;1&#xff09;文件夹的名字最好简单一点&#xff0c;比如&#xff1a;scan、123等等&#xff1b; &#xff08;2&#xff09;文件夹的共享权限最好能设置为最大&#xff08;WindowsXP、Windows200…

Future、CompletableFuture概述

1.同步和异步 &#xff08;1&#xff09;同步&#xff1a;需要等待结果返回&#xff0c;才能继续运行 &#xff08;2&#xff09;异步&#xff1a;不需要等待结果返回&#xff0c;就能继续运行 &#xff08;3&#xff09;异步设计&#xff1a;多线程可以让方法执行变为异步(比…

第四章必备前端基础知识-第二节3:CSS盒模型和浮动

文章目录一&#xff1a;盒模型&#xff08;1&#xff09;border&#xff08;2&#xff09;padding&#xff08;3&#xff09;margin二&#xff1a;flex布局一&#xff1a;盒模型 盒模型&#xff1a;在HTML中&#xff0c;每个标签&#xff08;或元素&#xff09;相当于是一个盒…

Mybatis和Jpa

这里写目录标题1.Mybatis1.1 JDBC的缺点1.2 Mybatis的整体架构1.3 入门案例1.3.1 问题:无法连接到数据库服务器1.4 动态代理实现Mapper1.5 mybatis-config.xml配置1.5.1 properties属性读取外部资源1.5.2 settings设置1.5.3 typeAliases1.5.4 typeHandlers&#xff08;类型处理…

【Substance Designer】基础操作和节点学习记录

写在前面 这个记录稍微有点杂&#xff0c;大概是庄懂的技术美术入门课(美术向)-直播录屏-第20课和一些基础操作的记录合集吧&#xff01; 补充 学习发现&#xff0c;基础的节点是需要学习和记录的&#xff0c;但是真正用起来还是要多用多练&#xff01;所以这种简单的记录节点…

YOLOv5/v7 引入 RepVGG 重参数化模块

本篇博文代码出自YOLOv5-lite &#xff0c;YOLOv5-lite的作者在CSDN的账号是 pogg_ &#xff0c;大家可以关注一下&#xff0c;这也是一位在开源项目上做了很多工作的博主。 RepVGG的原理和融合推导过程可以看我的这篇博文&#xff1a;RepVGG&#xff1a;让VGG风格的ConvNets再…

机制设计原理与应用(三)Screening

文章目录3 Screening3.1 为单个不可分割的项目定价3.1.1 对θ\thetaθ的假设3.1.2 问题描述3.1.3 特性3.2 为无限可分的项目定价3.2.1 对θ\thetaθ的假设3.2.3 特性3.2.4 收益最大化3.2.5 最优解决方案3 Screening Screening theory&#xff1a;机制设计理论可以被看作是其多…

Cadence PCB仿真使用Allegro PCB SI生成振铃ringing仿真报告及报告导读图文教程

🏡《Cadence 开发合集目录》   🏡《Cadence PCB 仿真宝典目录》 目录 1,概述2,生成报告3,报告导读4,总结1,概述 本文简单介绍使用Allegro PCB SI生成网络的振铃性能评估的报告的方法,及振铃ringing报告要点导读。 2,生成报告 第1步,选择需要生成报告的网络,然后…

第二章 ArcGIS数据和地理数据库

文章目录第一节 ArcGIS和4D数据基本知识1 4D数据介绍1.1 DLG1.2 DEM1.3 DOM1.4 DRG1.5 4D表现2 ArcGIS的数据和4D数据对应3 栅格数据3.1 查看帮助3.2 空间分辨率3.3 分辨率与比例尺换算3.4 栅格数据介绍——cellsize3.5 栅格数据波段3.6 栅格格式4 栅格数据改变分辨率5 转换栅格…

【 uniapp - 黑马优购 | 登录与支付(2)】如何实现三秒后跳转和微信支付

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;讨厌编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;见文末 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;…

Ubuntu20.04+MAVROS+PX4+Gazebo安装教程

Ubuntu20.04MAVROSPX4Gazebo安装PX4步骤安装MAVROS安装QGCPX4仿真安装PX4步骤 从github上clone源码 git clone https://github.com/PX4/PX4-Autopilot.git --recursive进入PX4-Autopilot文件夹&#xff0c;继续下载未下载完的组件 cd PX4-Autopilot/ git submodule update -…

flowable使用 act_hi_xxx

HistoryService 流程历史信息 act_hi_procinst : 历史流程信息&#xff0c;&#xff0c;如果流程执行完了&#xff0c;end_time_ 和 duration不为null // 没有执行完的List<HistoricProcessInstance> list historyService.createHistoricProcessInstanceQuery().unfi…

uniapp封装并全局挂载request请求

前言 日常开发中,前端项目中需要调用服务端api完成页面渲染,uniapp提供的请求api:uni.request相对繁琐;另外服务端提供的不同api仅子路径不同,api域名以及根路径都是相同的,一旦接口api变更,需要更改地方就会很多.鉴于以上可以将uni.request进行封装,简化开发. 目前uniapp项…

MySQL(四):B+树索引、聚簇索引、二级索引、联合索引

目录一、B树索引1.1 在没有索引时进行查找记录1.2 索引方案1.3 InnoDB中的索引方案二、聚簇索引三、二级索引四、联合索引五、InnoDB中B树索引的注意事项5.1 根页面的位置不会改变5.2 内节点中目录项记录的唯一性5.3 一个页面至少容纳两条记录一、B树索引 数据库中的用来存储数…

MySQL进阶篇之索引1

02、索引 2.1、索引概述 1、介绍 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#…

Cepstral Analysis 倒谱分析

源过滤器分离 倒谱分析是另一种将声道滤波器响应与激励分开的方法&#xff08;如线性预测&#xff09; 它基于以下观察&#xff1a;语音信号的频谱是激励频谱和声道频率响应的乘积 可以使用log将乘法转换为加法&#xff0c;因此&#xff0c;“对数频谱”可以看作是对数激励频…

十七、Gtk4-Menu and action

Menu 用户经常使用菜单向计算机发出命令。它是这样的: 现在让我们分析一下上面的菜单。对象有两种类型。 “File”, “Edit”, “View”, “Cut”, “Copy”, “Paste” and “Select All”. 它们被称为“菜单项&#xff08;menu item&#xff09;”或简单地称为“item”。当…