Linux基础:Vim编辑器实用指南

前言

在这里插入图片描述
Linux基础是学习云原生的重中之重,如果你还不知道学习路线可以参考:

耗时3个月,线下访谈30+ csdn大佬,规划出了我的云原生学习路线

文章目录

  • 前言
  • vim的介绍
  • vim的四种模式
    • 1. 插入模式
      • 1.1 进入插入模式:
      • 1.2 退出插入模式:
    • 2. 普通模式
      • 2.1 光标定位
      • 2. 2.对文本进行处理
    • 3. 命令模式
      • 3.1 文本内容查询
      • 3.2 命令行操作
      • 3.3 替换模式
    • 4. 可视化模式
  • vim同时操作多个文件
  • 总结

vim的介绍

vim号称编辑器之神,唯快不破,可扩展,各种插件满天飞。

vim源于vi, 但不是vi。 vi是美国计算机科学家比尔.乔伊编写并发布于1976年。

关键是这个只是他职业生涯的一个副产品,没有做什么维护。

vim是布莱姆.米勒于1991年发布。Vim最早的版本是1.14,它是基于Amiga计算机上的AmigaVI编辑器开发而来。

Vim的目标是提供一个兼容vi的编辑器,并在此基础上增加新特性和改进。

优秀的程序员都有个特性,感觉不爽就写个工具。

vim的四种模式

  1. 普通模式: vim启动后的默认模式,用来移动光标,删除文本,覆盖输入文本,恢复操作,粘贴文本
  2. 插入模式,输入i后进入插入模式,在这个模式下敲击键盘会往文字缓冲区增加文字,相当于普通的编辑器的编辑模式
  3. 可视模式: 选择多行文本进行复制,删除,排序等操作
  4. 命令模式: 执行内部和外部命令,通过: ? / 等进入命令模式,进行操作
  5. 替换模式: 替换模式也可以划入到命令模式

1. 插入模式

  • 首次进入文件 ---- 命令模式
  • 出现 “Insert” ---- 编辑模式
  • 退出插入模式:输入: ---- 命令行模式

1.1 进入插入模式:

  1. 按下 i 键,在当前光标位置之前插入文本。
  2. 按下 a 键,在当前光标位置之后插入文本。
  3. 按下 o 键,在当前行的下方插入一个新行,并进入插入模式。
  4. 按下 O 键,在当前行的上方插入一个新行,并进入插入模式。
  5. 按下 I 键,在当前行的行首插入文本。
  6. 按下 A 键,在当前行的行尾插入文本。
  7. 按下 s 键,删除当前字符并进入插入模式。
  8. 按下 S 键,删除当前行并进入插入模式。

1.2 退出插入模式:

按下 Esc 键,返回普通模式。

2. 普通模式

切换到命令行模式:
按下 : 键,进入命令行模式,可以执行各种命令。

2.1 光标定位

  • hjkl : 左下上右

在早期的计算机键盘上,没有专门的方向键。因此,在设计vi时,Bill Joy选择了键盘上与字母键相邻的 hjkl 键作为光标移动键。这些键被认为比较容易记忆和使用,并且位于键盘底部,因此可以更自然地控制光标移动。

具体来说,h、j、k、l 键是沿着键盘上的水平和垂直方向排列的

在这里插入图片描述

  • 快速定位

0 和 home键表示切换到行首, $和end键表示切换到行尾
gg 快速定位到文档的首行 , G定位到未行
3gg 或者 3G 快速定位到第3行

  • 通过打开文件进行光标定位
vim +<行号> <文件名>
vim <文件名> +"normal <行号>G"
Vim file : 第一行的行首 第一次打开文件
Vim file +5: 跳到第五行

[root@itlaoxin41 ~]# vim passwd +$
vim +10 filename.txt   # 打开文件后将光标定位到第10行

vim +10:20 filename.txt   # 打开文件后将光标定位到第10行第20列
Vim file +: 跳到最后一行
vim +/<搜索字符串> <文件名>
vim +/example filename.txt   # 打开文件并将光标定位到第一个匹配 "example" 的位置
Vim file +/root 第一次打开文件

2. 2.对文本进行处理

文本编辑分为删除,复制,粘贴,剪切,撤销

  • y复制(以字符为单位) :表示对单个字符进行复制,如果要复制整行,用yy(以行为单位)
    复制N行:Nyy,比如: 2yy ,表示复制2行
  • y$:从光标所在位置复制到行尾
  • y^:从光标所在位置复制到行首
  • dd(删除,以行为单位,删除当前光标所在行)
    删除N行: Ndd,比如: 2dd ,表示删除2行
  • d0:删至行首
  • d$:删至行尾
  • p : p粘贴
  • x 删除光标所在位置的字符
  • D 从光标处删除到行尾
  • u 撤销操作
  • r: 替换,或者说用来修改一个字符
  • ctrl +r 还原撤销过的操作,将做过的撤销操作再还原回去,也就是说撤销前是什么样,再还原成什么样

3. 命令模式

命令模式指的是 执行内部和外部命令,通过: ? / 等进入命令模式,进行操作

3.1 文本内容查询

  • /string(字符串) -----找到或定位你要找的单词或内容,如果相符内容比较多,我们可以通过N、n来进行向上向下查找,并且vi会对查找到的内容进行高亮显示,取消用 :noh
    -/^d :^意思表示以什么开头 ,查找以字母d开头的内容
  • /t$ $意思表示以什么结尾,,查找以字母t结尾的内容

3.2 命令行操作

常见和常用的命令操作

:q!:退出 Vim 
:wq:存盘退出 
:s:执行替换 
:!:执行外部命令 
:edit(一般缩写为 “:e”):编辑文件 
:w:写文件 
:r:读文件 并且插入
:help:查看帮助
:set nu 设置行号
:set ic 不区分大小写
:set list 显示控制字符 nolist
:set nonu 取消设置行号
:set noic 取消
:set ai 自动缩进,比如换行操作,设置这个功能后,可以在下次操作时进行自动换行
:noh 取消高亮显示

在vim中直接执行,属于临时操作,如果想永久生效,需要设置环境变量:

永久设置环境
/etc/vimrc设置后会影响到系统所有的用户
~/.vimrc#在用户的家目录下,创建一个.vimrc。这样只影响到某一个用户,没有自己建一个
例:

[root@itlaoxin63 ~]# cat /root/.vimrc 
set nu
  • 调用外部文件或者命令
    在命令行模式下操作:
:!ifconfig 
#调用系统命令

读取其他文件。(把其他文件中的内容追加到当前文档中)

:r /etc/hosts

3.3 替换模式

文本替换,可以使用

  1. 替换当前行中的文本:
:s/old/new:将当前行中的第一个匹配到的 "old" 替换为 "new"。
:s/old/new/g:将当前行中所有匹配到的 "old" 替换为 "new"。使用 g 标志表示全局替换。
:s/old/new/i:进行不区分大小写的替换。使用 i 标志表示忽略大小写。
  1. 替换整个文件中的文本:
:%s/old/new:将整个文件中的第一个匹配到的 "old" 替换为 "new"。
:%s/old/new/g:将整个文件中所有匹配到的 "old" 替换为 "new"。使用 g 标志表示全局替换。
:%s/old/new/gc:将整个文件中所有匹配到的 "old" 替换为 "new",并在替换前进行确认。
使用 c 标志表示确认每次替换。
  1. 限定替换范围:
:<start>,<end>s/old/new/g:在指定的行范围内进行全局替换。
将 <start><end> 替换为起始和结束行号。
  1. 使用正则表达式进行替换:
:s/pattern/replacement:使用正则表达式进行模式匹配和替换。
将 "pattern" 替换为正则表达式模式,"replacement" 替换为要替换成的内容。

常见案例:

:1,3 s/bin/itlaoxin 替换第13行中出现的第一个bin进行替换为itlaoxin
:1,3 s/bin/itlaoxin/g 替换第13行中查找到所有的bin进行替换为itlaoxin
:3 s/itlaoxin/aaaaa #只把第3行中内容替换了
 :% s/s/ssaass/g 将文本中所有的s替换成ssaass
:% s/IT/yyy/gi 将文本中所有的IT替换成yyy, 并且忽略IT的大小写
:% s@a@b@g 将文本中所有的a替换成b

4. 可视化模式

Vim中的可视化模式(Visual mode)允许你在编辑器中选择、操作文本块。在可视化模式下,可以选择字符、行或块,然后对选中的文本应用编辑命令。

批量加#号:

V模式(列)
进入v模式 移动光标选择区域
编程的时候需要进行多行注释:

  1. ctrl+v 进入列编辑模式
  2. 向下或向上移动光标,把需要注释、编辑的行的开头选中起来
  3. 然后按大写的I
  4. 再插入注释符或者你需要插入的符号,比如"#"
  5. 再按Esc,就会全部注释或添加了

删除:再按ctrl+v 进入列编辑模式;向下或向上移动光标 ;选中注释部分,然后按d或者x, 就会删除注释符号。

在这里有两个常用的参数:

缩进:按下">“键对所选文本进行缩进。
反缩进:按下”<"键对所选文本进行反缩进。

vim同时操作多个文件

1.打开多个文件:在终端中使用Vim命令打开多个文件,例如:

   vim file1.txt file2.txt

这将在Vim中打开file1.txt和file2.txt两个文件,并显示一个文件列表。你可以在文件列表中移动光标并按回车键打开你要编辑的文件。

  • 文件切换

使用命令 :n 或 :next 可以切换到下一个文件
使用 :prev 或 :previous 可以切换到上一个文件

2 .分割窗口:在Vim中,可以使用分割窗口的方式同时显示多个文件。

使用命令 :split 或 :sp 可以在水平方向上分割窗口
使用命令 :vsplit 或 :vsp 可以在垂直方向上分割窗口。
在分割窗口后,使用 Ctrl + W 组合键结合方向键进行窗口间的切换

  1. 其他方式:

方法1:以上下形势,打开两个文档

[root@itlaoxin63 ~]# vim -o /etc/passwd /etc/hosts

方法2:以左右方式打开两个文档

[root@itlaoxin63 ~]# vim -O /etc/passwd /etc/hosts

注:ctrl+ww 在两文档之间进行切换编辑。
大写O左右分屏,小写的o上下分屏

总结

以上就是vim的全部内容,可以在评论区留言探讨。

我是沐风晓月,在学习的路上一直前行,期待与你一起进步。

想学习更多内容,也可以关注我师父的博客:互联网老辛

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Pytorch]Broadcasting广播机制

文章目录 Broadcasting广播机制BroadcastableBroadcasting Broadcasting广播机制 Broadcasting机制用于在不同维度的张量进行运算时进行维度的自动增加与扩展&#xff0c;Broadcasting机制使用的前提是两个参与运算的张量是可broadcastable的。 Broadcastable 怎样的两个向量…

【数据分析之道-Matplotlib(七)】Matplotlib直方图

文章目录 专栏导读1、hist()基本语法2、使用 hist() 函数绘制多个数据组的直方图3、修改直方图的颜色及边框颜色4、六一儿童节为主题&#xff0c;使用直方图进行可视化 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享pyth…

web入门——springboot、HTTP协议

这里写目录标题 springboot入门 http协议概念以及特点请求协议格式请求头的一些含义解释 响应协议格式具体的状态码以及响应头的一些含义解释 协议解析 springboot 入门 http协议 概念以及特点 请求协议 格式 包括请求行、请求头、请求体三部分&#xff08;请求体是pos请求方…

想要让视频素材格式快速调整转换的方法分享

有时候有些视频播放软件不支持播放某些格式的视频文件&#xff1f;那要怎么解决呢&#xff1f;换一个播放软件&#xff1f;不妨试试批量转换视频格式&#xff0c;简单的几步操作就能快速解决烦恼&#xff0c;跟着小编一起来看看具体的操作环节吧。 首先先进入“固乔科技”的官网…

MapReduce分布式计算(二)

MapReduce工作流程 原始数据File 1T数据被切分成块存放在HDFS上&#xff0c;每一个块有128M大小 数据块Block hdfs上数据存储的一个单元,同一个文件中块的大小都是相同的 因为数据存储到HDFS上不可变&#xff0c;所以有可能块的数量和集群的计算能力不匹配 我们需要一个动态…

MySQL中的DDL操作,MySQL中DML操作,MySQL查询数据,SQL函数,MySQL中的索引,MySQL事务,MySQL的用户管理,MySQL分页查询

目录 MySQL中的DDL操作 一、创建表与删除表 1&#xff0c;创建表 2&#xff0c;查看已创建的表。 3&#xff0c;删除表 二、修改表 1&#xff0c;修改表名 2&#xff0c;修改列名 3&#xff0c;修改列类型 4&#xff0c;添加新列 5&#xff0c;删除指定列 三、MySQ…

ML算法——Support Vector Machine随笔【机器学习】

文章目录 4、Support Vector Machine (SVM)4.1、理论部分4.1.1、更优的决策边界4.1.2、解决低维不可分问题 4.2、sklearn 实现4.2.1、SVM 分类&#xff08;SVC&#xff09;4.2.2、SVM回归&#xff08;SVR&#xff09;4.2.3、网格调参 4.3、案例 4、Support Vector Machine (SVM…

UE5 Stride Warping Orientation Warping功能学习

在UE5的 Lyra Demo中&#xff0c;运用到了各类动画Warping&#xff08;动画扭曲&#xff09;技术&#xff0c;通过各类Warping节点在动画蓝图中的合理组织&#xff0c;可以有效的解决运动滑步问题&#xff0c;并为动画增添更多细节。 本文主要基于Animation Warping插件讲一下…

python 加速(1)

文章目录 简单步骤像Python一样做torch 的一切安装Cmake安装 Torch &#xff08;GPU&#xff09;CMakeLists.txt试用小样设置 CLion 环境 Cuda配置VS C 环境建上手的文件step1: interpolation.cppstep2: interpolation_kernel.custep3: include/ utils.hstep4: setup.pystep5: …

【系统架构】第五章-软件工程基础知识(软件测试、净室软件工程、基于构件的软件工程、 软件项目管理)

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 软件测试 一、测试方法 以测试过程中程序执行状态为依据可分为静态测试&#xff08;ST&#xff09;和动态测试&#xff08;DT&#xff09; 以具体实现算法细节和系统内部结构的相关情况为根据…

【强化学习】常用算法之一 “A3C”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

VUE3-组件问题

VUE3-组件问题 文章目录 VUE3-组件问题一、S-Table1.问题描述2.问题展示3.问题解决 二、form表单无法显示1.问题描述2.问题展示3.问题解决 三、input 框为不可编辑状态四、Echarts组件未渲染五、图片正常引用&#xff0c;但是部署服务器部署不上去&#xff0c;看不到图片1.图片…

element封装 table表格 ,插槽的使用,修改el-table-column的值

举例 vue2这种不封装的 直接写的很罗嗦麻烦 下面圈起来的可以封装一个对象 进行循环 弊端: 循环后 无法进行获取更改某一列的值 比如data日期我需要转换年月日 不循环我直接在这个el-table-column的这一列进行写&#xff08;如下&#xff09; <el-table-column label&quo…

Vue3解决:[Vue warn]: Failed to resolve component: el-table(或el-button) 的三种解决方案

1、问题描述&#xff1a; 其一、报错为&#xff1a; [Vue warn]: Failed to resolve component: el-table If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement. at <App> 或者&#xff1a; …

实验 4:排序与查找

东莞理工的学生可以借鉴&#xff0c;请勿抄袭 1.实验目的 通过实验达到&#xff1a; 理解典型排序的基本思想&#xff0c;掌握典型排序方法的思想和相应实现算法&#xff1b; 理解和掌握用二叉排序树(BST)实现动态查找的基本思想和相应的实现 算法。 理解和掌握哈希(HASH)存…

【Django】图形验证码显示及验证

图形验证码显示及验证 开发项目时&#xff0c;在登陆或者注册功能中为防止脚本恶意破坏系统&#xff0c;故而添加图形验证码。 文章目录 图形验证码显示及验证1 安装配置2 验证码显示及正确性验证3 效果显示 1 安装配置 安装第三方库 pip install django-simple-captcha配置s…

《计算机系统与网络安全》 第六章 密钥管理

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

mysql8.0新特性详解

一、my.ini或my.cnf的全局参数 一个连接最少占用内存是256K&#xff0c;最大是64M&#xff0c;如果一个连接的请求数据超过64MB&#xff08;比如排序&#xff09;&#xff0c;就会申请临时空间&#xff0c;放到硬盘上。 #最大连接数 max_connections3000 #最大用户连接数 max_…

RS485转Profinet通讯

RS485转Profinet通讯 概述系统组成流量积算仪网关 软件总结 概述 一个支持RS485的流量积算仪的数据要被Profinet的PLC读取。制作一个网关&#xff0c;实现RS485到Profinet的转换。 系统组成 流量积算仪 支持RS485通讯&#xff0c;通讯协议是modbus RTU。采用功能码3可以读取…

ChatGPT从入门到精通,深入认识Prompt

ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视化图表制作 全面AI时代就在转角 道路已经铺好了 “局外人”or“先行者” 就在此刻 等你决定 让ChatGPT帮你高效实现职场办公&#xff01;行动起来吧。欢迎关注专栏 1、ChatGPT从入门到精通&#xff0…