Linux-----14、vim

# vim

  • Linux平台下的文本编辑器: emacs、nano、gedit、vivim

vi(visual editor)编辑器通常被简称为vi,它是Linux和Unix系统上最基本的文本编辑器,类似于Windows 系统下的记事本。学会它后,我们将在Linux 的世界里游刃有余。

  • 为什么要学习vim?

    1. 所有的Unix like系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在

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

    3. vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计

    4. 程序简单,编辑速度快

    5. vim是vi的升级版

# vim工作模式

vim工作在三种模式之下:

image-20231221124344179

命令模式:是主要使用快捷键的模式,是我们后面学习的重点。命令模式想要进入输入模式,可以使用以下的方式:

image-20231102110923623

输入模式:主要用于文本编辑,和记事本类似,输入数据就好。

末行模式(编辑模式):

:w				保存不退出:w 新文件名	 文件另存为
:q				不保存退出
:wq				保存退出
:!				强制:q!			强制不保存退出,用于修改文件之后,不保存数据退出。:wq!		强制保存退出,当文件的所有者或者root用户,对文件没有写权限的时候,强制写入数据使用
:x				在文件没有修改的情况下,表示直接退出(等价于:q),在文件修改的情况下等价于(:wq)

# 1、命令行模式

问:命令行可以干什么?

答:可以进行一些基本的复制、删除、跳转、撤销、移动等操作

命令含义备注
yy复制光标所在行3yy表示复制3行
p(小写p)光标所在行后面粘贴
P(大写P)光标所在行前面粘贴
gg光标快速跳到文件首行,并且定位到首字符3gg表示快速跳到文件第3行行首字符
G光标快速跳到文件尾行,并且定位到首字符
home跳转到行首Shift+6 即 ^ 符号表示行首
end跳转到行尾Shitf+4 即 $ 符号表示行尾
dd删除光标所在行3dd表示删除3行(包括光标所在行
d^从光标位置删至行首,不包括光标位
d$从光标位置删至行尾,包括光标位,与D作用相同
dG删除光标所在行以及下面所有行
dgg删除光标所在行以及上面所有行
x(小写)删除光标所在字符后面一个字符,3x删除3个字符类似于windows下的delete键
X(大写)删除光标所在字符前面一个字符,3X删除3个字符类似windows下的backspace键
u撤销操作ctrl+r 取消撤销

# 移动光标

# 1)上下左右移动光标
h	j	k	l
←	↓	↑	→

2)把光标移动到文件头或尾

gg	文件头
G	文件尾

3)移动到行首或行尾

^	行首
$	行尾

4)移动到指定行

:n	到第n行

# 删除或剪切

1)删除字母

x	删除单个字母
nx	删除n个字母n是数字,如果打算从光标位置删除连续的10个字母,可以使用“10x”即可。
删除字母并不符合使用习惯,我们更习惯在编辑模式中,用“Backspace”键删除字母。

2)删除整行或剪切

dd		删除单行
ndd		删除多行
:n1,n2d	删除指定范围的行删除整行或多行,这是比较常用的删除方法。
这里的dd快捷键既是删除,也是剪切。
删除内容放入了剪切板,如果不粘贴就是删除,如果粘贴就是剪切。粘贴方法如下:p		 粘贴到光标后
P(大)	粘贴到光标前:1,8d 	删掉文本的1到8行

3)从光标所在行删除到文件尾

dG	从光标所在行删除到文件尾

# 复制

yy	复制单行
nyy	复制多行复制之后的粘贴,依然可以使用p键或P(大)键

# 撤销

u			撤销
ctrl + r	反撤销“u”键能一直撤销到文件打开时的状态,类似Windows下“ctrl+z”键的作用。
“ctrl+r”能一直反撤销到最后一次操作状态,类似Windows下“ctrl+y”键的作用。

# 替换

r	替换光标所在处的字符
R	从光标所在处开始替换字符,按ESC结束“r”键替换单一字符,不用进入输入模式,实际使用时,比进入输入模式删除后再修改,要方便。

# vim配置文件

这次末行模式参数设置,多数需要在vim中才能生效。

设置参数含义
:set nu
:set number
:set nonu
显示与取消行号。
:syntax on
syntax off是否依据语法显示相关的颜色帮助。
在Vim中修改相关的配置文件或Shell脚本文件时(如前面示例的脚本/etc/init.d/sshd),
默认会显示相应的颜色,用来帮助排错。
如果觉得颜色产生了干扰,则可以取消此设置
:set hlsearch
:set nohlsearch设置是否将查找的字符串高亮显示。默认是set hlsearch高亮显示
:set ruler
:set noruler设置是否显示右下角的状态栏。默认是set ruler显示
:set showmode
:set noshowmode设置是否在左下角显示如”–INSERT–“之类的状态栏。默认是set showmode显示
:set list
:set nolist设置是否显示隐藏字符(Tab键用”^I“表示,回车键用”$“表示)。
默认是nolist显示。如果使用set list显示隐藏字符,类似”cat -A 文件名“。

vim支持更多的设置参数,可以通过“:set all”进行查看。

大家会发现,这些设置参数都只是临时生效,一旦关闭文件再打开,又需要重新输入。如果想要永久生效,需要手工建立vim的配置文件“~/.vimrc”,把你需要的参数写入配置文件就永久生效了。

补充:Windows下回车符在Linux中是用“^M$”符。这样会导致Windows下编辑的程序脚本,无法在Linux中执行。这时可以通过命令“dos2unix”,把Windows格式转为Linux格式,当然反过来“unix2dos”命令就是把Linux格式转为Windows格式。这两个命令默认没有安装,需要手工安装才能使用。

全局配置 /etc/vimrc
单用户配置 ~/.vimrc
[root@xiaoshaozi ~]# vim ~/.vimrcset nu永久设置行号
echo "set number" >> /etc/vimrc

# 查找

/查找内容	从光标行向上查找
?查找内容	从光标行向下搜索
n			上一个
N			下一个搜索摸索
:/root n往下匹配;N往上匹配

# 替换

:1,10s/old/new/g	替换1到10行的所有old为new
:%s/old/new/g		替换整个文件的old为new替换模式
:%s/root/ROOT/ 全文搜索,替换每一行匹配到的第一个关键字
:%s/root/ROOT/g 全文搜索,替换每一行所有匹配的关键字
:%s/root/ROOT/gc 交互式替换
:%s/\/sbin\/nologin/\/bin\/bash/ \转义符
:%s#/sbin/nologin#/bin/bash#g 更换分隔符
:7s/shutdown/SHUTDOWN/g 只替换第7行的内容

替换字符串,(注释#)前十行

:1,10s/^/#/g	注释1到10行
:1,10s/^#//g	取消注释

替换字符串,(注释//)前十行

:1,10s/^/\/\//g		注释1到10行
:1,10s/^\/\///g		取消注释

# vim使用技巧

# 在vim中导入其他文件内容或命令结果

# 导入其他文件内容
:r 文件名		把文件内容导入光标位置:r /tmp/5.txt 	在光标所在行下面读取/tmp/5.txt文件内容
:3r /tmp/5.txt 	在当前文本的第3行后读取/tmp/5.txt文件

可以把其他文件的内容导入到光标所在位置

# 保存内容到文件内
地址定位
:1,5 w /tmp/5.txt 	#保存前5行内容到/tmp/5.txt
# 在vim中执行系统命令
:!命令		在vim中执行系统命令

这里只是在vim中执行系统命令,但并不把系统命令的结果写入到文件中。主要用于在文件编辑中,查看系统信息,如时间。

:n! command 用命令的执行结果替换第n行内容
:nr !command 在第n行下面读取命令所执行的结果

# 导入命令结果

:r !命令		在vim中执行系统命令,并吧命令结果导入光标所在行

在vim中执行系统命令,并吧命令结果导入光标所在行。

# 设定快捷键

:map 快捷键 快捷键执行的命令		自定义快捷键

vim允许自定义快捷键,常用的自定义快捷键如下:

:map ^P I#<ESC>		按”ctrl+p“时,在行首加入注释
:map ^B ^x			按”ctrl+b“时,删除行首第一个字母(删除注释)

注意:^P快捷键不能手工输入,需要执行ctrl+V+P来定义,或ctrl+V,然后ctrl+P^B快捷键也一样

# 字符替换

:ab 源字符 替换为字符		字符替换

在vim编辑中,有时候需要频繁输入某一个长字符串(比如邮箱),这时使用字符串替换,能增加输入效率,例如:

:ab mymail shenchao@163.com 	当碰到“mymail”时,转变为邮箱

注意:“源字符”不应设置的太短,否则有可能影响输入。

# 多文件打开

在vim中可以同时打开两个文件,只要执行如下命令:

[root@xiaoshaozi ~]# vim -o abc bcd
[root@xiaoshaozi ~]# vim -O abc bcd#-o		小写o会上下分屏打开两个文件
#-O		大写O会左右分屏打开两个文件切换窗口-o(小)	ctrl+w  上下键-O(大)	ctrl+w  左右键

这样可以同时打开两个文件,方便操作。

在这里插入图片描述

# vim打开文件

vim 文件名			 	# 默认会进入命令行模式
vim +n 文件名			# 打开指定的文件,并且将光标移动到指定行
vim +/关键字 文件名	  # 打开指定的文件,并且高亮显示关键词# rm -rf /tmp/*
# cp /etc/passwd /tmp/
[root@localhost ~]# vim /tmp/passwd
[root@localhost ~]# vim +5 /tmp/passwd
[root@localhost ~]# vim +/shutdown /tmp/passwd

# 取消高亮

取消高亮
:noh (no highlight)

# 多窗口编辑问题

当两个终端同时打开或者意外结束文件时,会产生一个.swap文件 (交换文件)

# 举例说明:

你在两个终端同时打开/tmp/passwd文件,会产生/tmp/.passwd.swp。这时,有六个按钮可以使用:

O(pen for Read-Only):	打开成只读文件。
E(dit):		 用正常方式打开要编辑的文件,并不会载入暂存文件的内容。这很容易出现两个用户相互改变对方的文件的问题。
R(ecover):	加载暂存文件的内容。
D(elete):	如果你确定这个暂存文件是没有用的,则可以删除。
Q(uit):		不进行任何操作,回到命令行。
A(bort):	忽略这个编辑行为,和Q类似。需要注意的是:
这个暂存文件不会因为你结束vim后自动删除,必须要手动删除。否则每次打开对应的文件时都会出现这样的提示。

使用ctrl + z接收当前终端vim编辑产生零时文件

使用fg命令重新进入继续编辑

# 可视化模式(了解)

按键:ctrl + v(可视块)或V(可视行),然后按下↑ ↓ ← →方向键来选中需要

复制的区块,按下y 键进行复制(不要按下yy),最后按下p 键粘贴

退出可视模式按下Esc

# 快速注释
ctrl + v
选中区块
I
输入文字
esc# 快速删除
ctrl + v
选中区块
d

# 高频命令

命令行模式:
# 复制一行
yyp
# 删除行
dd
# 撤回
u
# 取消撤回
ctrl + r
# 文件末尾
G
# 文件首位
gg
# 行首
^
# 行末
$# 挂起shell
Ctrl + z  
fg重新进入vim# 快速注释
ctrl + v
选中区块
I
输入文字
esc# 快速删除
ctrl + v
选中区块
d# 选择复制
v
选中区
y
p底行模式:
临时设置行号
:set number 或 :set nu搜索摸索
:/root n往下匹配;N往上匹配
:%s/root/ROOT/gc 交互式替换
取消高亮
:noh (no highlight)

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

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

相关文章

Vue数组变更方法和替换方法

一、可以引起UI界面变化 Vue 将被侦听的数组的变更方法进行了包裹&#xff0c;所以它们也将会触发视图更新。这些被包裹过的方法包括&#xff1a; push()pop()shift()unshift()splice()sort()reverse() 以上七个数组都会改变原数组&#xff0c;下面来分别讲解它们的区别&…

【Unity】【WebRTC】如何用Unity而不是浏览器接收远程画面

【背景】 之前几篇我们讨论了如何设置信令服务器&#xff0c;如何发送画面给远端以及如何用浏览器查看同步画面&#xff0c;今天来讨论如何实现Unity内部接收画面。 看本篇之前请先看过之前将web服务器设置和基本远程画面功能的几篇博文。&#xff08;同专栏下查看&#xff09…

如何通过宝塔面板搭建一个MySQL数据库服务并实现无公网ip远程访问?

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

python-dlib实现人脸提取和分割

效果 → 参考资料和资源 GitHub - Onwaier/SegfaceAndAlignByDlib: 用dlib实现脸部分割和人脸对齐 shape_predictor_68_face_landmarks.dat 下载地址_shape_predictor_68_face_landmarks.dat下载-CSDN博客 未运行的参考资料 dlib实现脸部分割与人脸对齐 - 知乎 py代码 &…

【Lidar】Open3D点云DBSCAN聚类算法:基于密度的点云聚类(单木分割)附Python代码

1 DBSCAN算法介绍 DBSCAN聚类算法是一种基于密度的聚类算法&#xff0c;全称为“基于密度的带有噪声的空间聚类应用”&#xff0c;英文名称为Density-Based Spatial Clustering of Applications with Noise。 DBSCAN聚类算法能够发现任意形状的类别&#xff0c;并且对噪音数据具…

全网最全pytest大型攻略,单元测试学这就够了!

pytest 是一款以python为开发语言的第三方测试&#xff0c;主要特点如下&#xff1a; 比自带的 unittest 更简洁高效&#xff0c;兼容 unittest框架支持参数化可以更精确的控制要测试的测试用例丰富的插件&#xff0c;已有300多个各种各样的插件&#xff0c;也可自定义扩展&am…

数字化时代的智能支持:亚马逊云科技轻量应用服务器技术领先

轻量应用服务器是一种简化运维、门槛低的弹性服务器&#xff0c;它的"轻"主要体现在几个方面&#xff1a;开箱即用、应用优质、上手简洁、投入划算、运维简便以及稳定可靠。相较于普通的云服务器&#xff0c;轻量应用服务器简化了云服务的操作难度、使用和管理流程&a…

mysql:查询服务器当前打开的连接数量

使用命令show global status like Threads_connected;可以查询mysql服务器当前打开的连接数量。 例如&#xff0c;查询如下&#xff1a; 启动应用&#xff0c;连接数据库&#xff0c;占用了1个连接&#xff0c;再查询如下&#xff1a; 由输出可以看出&#xff0c;打开的连接…

低代码和纯代码:双向奔赴,共创未来ing……

低代码开发是近年来迅速崛起的软件开发方法&#xff0c;让编写应用程序变得更快、更简单。有人说它是美味的膳食&#xff0c;让开发过程高效而满足&#xff0c;但也有人质疑它是垃圾食品&#xff0c;缺乏定制性与深度。你认为低代码到底是美味的膳食还是垃圾食品呢&#xff0c;…

【方案】如何利用大数据+云计算技术打造智能环境监控系统?

小编在之前的文章中也提到过基于云计算的环境智能监控系统是什么样的&#xff0c;收到了很多朋友的关注&#xff0c;今天小编就再次根据智能监控为切入点&#xff0c;深入讲解智能环境监控系统方案的详细落实。 1、传感器节点&#xff1a;首先需要选择适合应用场景的各类传感器…

Actuator内存泄露及利用Swagger未授权自动化测试实现

目录 0x00 前言 0x01 Actuator 泄露及利用 1、Actuator heapdump 内存泄露 2、知道泄露后如何进一步利用 3、如何发现 Actuator 泄露&#xff08;白盒/黑盒&#xff09; 0x02 Swagger自动化测试 1、什么是Swagger&#xff1f; 2、PostmanBurpSuiteXray 联动 3、思考 0x…

JavaAwtSwing的JFrame的pack()方法,容器适配子组件大小,笔记231220

pack()是extends自Window类的方法 使此窗口的大小适合其子组件的首选大小和布局。如果其中一个尺寸小于上一次调用setMinimumSize方法指定的最小尺寸&#xff0c;则会自动放大窗口的宽度和高度。 如果窗口和/或其所有者还不可显示&#xff0c;则在计算首选大小之前&#xff0…

tf卡数据恢复怎么做?记好这4个步骤!

“为了更好的保存数据&#xff0c;我一直都是用TF卡的。很多重要的文件和数据都保存在里面。但是我最近使用时&#xff0c;发现有部分数据丢失了。不知道该怎么办&#xff0c;有没有朋友可以帮帮我呀&#xff1f;” TF卡是一种闪存存储卡&#xff0c;通常用于手机、平板电脑和其…

Linux shell编程学习笔记37:readarray命令和mapfile命令

目录 0 前言1 readarray命令的格式和功能 1.1 命令格式1.2 命令功能1.3 注意事项2 命令应用实例 2.1 从标准输入读取数据时不指定数组名&#xff0c;则数据会保存到MAPFILE数组中2.2 从标准输入读取数据并存储到指定的数组2.3 使用 -O 选项指定起始下标2.4 用-n指定有效行数…

北斗高精度基坑安全监测系统解决方案

目录 1.概述 1.1背景 1.2设计原则 1.3建设内容 2.系统架构 2.1总体架构 2.2拓扑图 2.3云平台 2.3.1概述 2.3.2技术架构 2.3.3平台功能 2.4监测子系统 2.4.1位移监测子系统 2.4.2应力监测子系统 2.4.3环境监测子系统 1.概述 1.1背景 基坑监测是基坑工程施工中的…

一个前端大佬的十年回顾 | 漫画前端的前世今生

作者&#xff1a;京东科技 胡骏 引言 岁月如梭&#xff0c;十载流年 前端技术&#xff0c;蓬勃向前 HTML&#xff0c;CSS&#xff0c;JavaScript 演绎出璀璨夺目的技术画卷 回到十年前&#xff0c;前端技术就像一名戴着厚重眼镜的书呆子&#xff0c;总是小心翼翼&#xff…

车载蓝牙物联网解决方案

车载蓝牙物联网解决方案是一种基于蓝牙技术&#xff0c;结合物联网技术的智能车载系统。它利用蓝牙技术将智能手机、智能手表、智能车载设备等连接起来&#xff0c;实现设备之间的无缝通信和数据共享&#xff0c;为驾驶者提供更加便捷、安全和智能的驾驶体验。 车载蓝牙物联网解…

Flask重定向后无效果前端无跳转无反应问题

在网上搜了一下并没有什么好的解决方案&#xff0c;有的话也只是告诉你如何修改代码&#xff0c;并没有讲明白其中的原理以及导致问题的核心&#xff0c;因此特意去了解了一下HTTP的规范找到了答案 问题说明 问题出现的流程大致都是前端发送Ajax请求给后端&#xff0c;进行一些…

【愚公系列】2023年12月 HarmonyOS教学课程 037-ArkUI事件(焦点事件)

&#x1f3c6; 作者简介&#xff0c;愚公搬代码 &#x1f3c6;《头衔》&#xff1a;华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xf…

Flink电商实时数仓(三)

DIM层代码流程图 维度层的重点和难点在于实时电商数仓需要的维度信息一般是动态的变化的&#xff0c;并且由于实时数仓一般需要一直运行&#xff0c;无法使用常规的配置文件重启加载方式来修改需要读取的ODS层数据&#xff0c;因此需要通过Flink-cdc实时监控MySql中的维度数据…