Linux vi/vim以及三种模式常用快捷键

vi/vim

      • vi和vim
      • vi 命令模式
      • vi 插入模式
      • vi 底行模式

vi和vim

vivim 都是在 Linux 系统中的文本编辑器。vim 实际上是 vi 的增强版,提供了更多的功能和改进。

  1. vi

    • vi 是一个经典的文本编辑器,几乎在每个 Linux 发行版中都预装了。
    • vi 的使用可以分为三个主要模式:命令模式(Command mode)、插入模式(Insert mode)和底行模式(Ex mode)。
    • 命令模式下可以执行文件编辑、搜索、复制粘贴等操作。
    • 插入模式下可以直接输入和编辑文本内容。
    • 底行模式用于保存文件、退出 vi 等高级操作。
    • 例如,使用 vi filename 命令打开一个文件,在命令模式下按下 “i” 进入插入模式,进行文本编辑,然后按下 Esc 键回到命令模式,在命令模式下输入 “:wq” 并按回车键保存并退出。
  2. vim

    • vim(Vi IMproved)是对 vi 的增强版本,具有更多的功能和改进。
    • vim 拥有 vi 的所有功能,并添加了更多的功能和定制选项。
    • vim 提供了语法高亮、多级撤销、分屏编辑、代码补全等功能,以及大量的插件和扩展性。
    • vi 相比,vim 的学习曲线略高,但它为用户提供了更强大和灵活的编辑环境。
    • 使用 vim 的基本操作与 vi 类似,同时还有更多命令和选项可用。

vi 命令模式

在 vi 的命令模式下,常用的一些快捷键可以提高编辑效率。以下是几个常用的 vi 命令模式快捷键:

  1. 移动光标

    • h:将光标左移一个字符。
    • j:将光标下移一行。
    • k:将光标上移一行。
    • l:将光标右移一个字符。
  2. 文本编辑

    • i:在当前光标位置之前插入文本。
    • a:在当前光标位置之后插入文本。
    • o:在当前行之后插入新行,并进入插入模式。
    • dd:删除当前行。
    • yy:复制当前行。
    • p:粘贴已复制或删除的文本。
  3. 撤销和重做

    • u:撤销上一次操作。
    • Ctrl + r:重做被撤销的操作。
  4. 搜索与替换

    • /keyword:向后搜索指定关键字。
    • ?keyword:向前搜索指定关键字。
    • n:跳到下一个匹配项。
    • N:跳到上一个匹配项。
    • :s/old/new:在当前行替换第一个匹配项。
    • :s/old/new/g:在当前行替换所有匹配项。
    • :%s/old/new/g:在整个文件中替换所有匹配项。
  5. 保存和退出

    • :w:保存文件但不退出 vi。
    • :q:退出 vi(仅在没有修改的情况下)。
    • :wq:保存文件并退出 vi。
    • :q!:强制退出 vi,丢弃所有修改。

vi 插入模式

在vi中,输入模式用于插入和编辑文本。以下是进入输入模式的方法:

  1. 插入模式:在光标位置之前插入文本。

    • i:在当前光标位置之前开始插入文本。
    • a:在当前光标位置之后开始插入文本。
    • I:在当前行的第一个非空字符之前开始插入文本。
    • A:在当前行的末尾开始插入文本。
  2. 追加模式:在光标位置之后追加文本。

    • a:在当前光标位置之后开始追加文本。
    • A:在当前行的末尾开始追加文本。
  3. 打开新行

    • o:在当前行之后插入新行,并进入插入模式。
    • O:在当前行之前插入新行,并进入插入模式。
  4. 替换模式:替换光标所在位置的字符。

    • r:替换光标所在位置的字符。
    • R:一直处于替换模式,可以连续替换多个字符。
  5. 进入输入模式的其他方式

    • s:删除光标所在位置的字符并进入插入模式。
    • S:删除整行并进入插入模式。
    • C:删除从光标位置到行尾的内容并进入插入模式。

输入模式中可以进行文本编辑,并通过快捷键切换到命令模式或者执行保存退出等操作。要注意,在输入模式下,按下 Esc 键可以返回到命令模式。

vi 底行模式

Vi编辑器中的底行模式(Command-line Mode)用于执行一些命令和操作。在底行模式下,可以输入各种命令来执行编辑、搜索、保存和退出等操作。以下是一些常用的Vi底行模式命令:

  1. 保存和退出

    • :w:保存文件但不退出Vi。
    • :wq:保存文件并退出Vi。
    • :xZZ:保存文件并退出Vi(只有在文件有修改的情况下才会保存)。
    • :q:退出Vi(如果有未保存的修改,则无法退出)。
    • :q!:强制退出Vi,放弃所有未保存的修改。
  2. 搜索和替换

    • :/pattern:向后搜索指定的Pattern。
    • :?pattern:向前搜索指定的Pattern。
    • n:跳到下一个匹配项。
    • N:跳到上一个匹配项。
    • :s/old/new:在当前行替换第一个匹配项。
    • :s/old/new/g:在当前行替换所有匹配项。
    • :%s/old/new/g:在全文中替换所有匹配项。
  3. 文本编辑命令

    • :delete:d:删除当前行。
    • :copy:co:复制当前行或指定范围的行。
    • :move:m:移动当前行或指定范围的行。
    • :join:j:合并当前行与下一行。
  4. 显示和设置行号

    • :set number:set nu:显示行号。
    • :set nonumber:set nonu:不显示行号。
  5. 执行外部命令

    • :!command:执行Shell命令,并返回Vi编辑器。

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

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

相关文章

算法专题:子序列系列2(回文)

文章目录 示例1:回文子串思路DP数组含义(注意)递推公式初始化遍历顺序(注意) 完整版注意点 示例2:最长回文子序列思路DP数组含义递推公式初始化遍历顺序 完整版注意点另一种写法不能把DP数组全部初始化为1的…

【pandas使用小技巧】如何将DataFrame的index有序化【reset_index()方法】

在pandas中,可以使用**reset_index()**方法将DataFrame的index改成连续的。reset_index()方法会将原来的index作为一列新的数据添加到DataFrame中,并将新的index设置为连续的整数。栗子如下,演示如何使用reset_index()方法将DataFrame的index…

vue3搭建(vite+create-vue)

目录 前提条件 输入命令 对于Add an End-to-End Testing Solution nightwatch和Cypress 和 Playwright 运行 前提条件 熟悉命令行已安装 16.0 或更高版本的 Node.js (node -v查看版本) 输入命令 npm init vuelatest 这一指令将会安装并执行 create-…

Meta AI研究团队新AI模型: Llama 2 大语言模型

Llama是Facebook Research团队开发的基础语言模型集,旨在提供广泛的语言理解能力。它基于转换器架构,参数范围从7B到65B。通过使用Llama模型,研究人员和开发人员可以构建更先进的自然语言处理系统。您可以在GitHub上找到相关的代码和资源&…

kotlin 编写一个简单的天气预报app(四)增加界面显示

编写界面来显示返回的数据 用户友好性&#xff1a;通过界面设计和用户体验优化&#xff0c;可以使天气信息更易读、易理解和易操作。有效的界面设计可以提高用户满意度并提供更好的交互体验。 增加城市名字的TextView <TextViewandroid:id"id/textViewCityName"…

web基础与http协议

dns域名&#xff1a;网络是基于tcp/ip协议进行通信和连接的 ip地址&#xff1a;每一台主机都是有一个唯一的地址标识&#xff08;固定的ip地址&#xff09; 作用&#xff1a;1、区分用户和计算机 2、通信 ip地址的问题&#xff1a;由32位二进制数组成&#xff0c;不方便记忆…

CentOS 7虚拟机 虚拟机安装安装增强VBox_GAs_6.1.22失败:modprobe vboxguest failed

我安装的CentOS 在安装增强工具的时候报错: 查阅资料后 &#xff0c;解决方法&#xff1a; 1、更新kernel内核版本&#xff1a; yum update kernel -y //安装kernel-devel和gcc编译工具链yum install -y kernel-devel gcc//更新kernel和kernel-devel到最新版本yum -y upgrade …

就业并想要长期发展选数字后端还是ic验证?

“就业并想要长期发展选数字后端还是ic验证&#xff1f;” 这是知乎上的一个热点问题&#xff0c;浏览量达到了13,183。看来有不少同学对这个问题感到疑惑。之前更新了数字后端&数字验证的诸多文章&#xff0c;从学习到职业发展&#xff0c;都写过&#xff0c;唯一没有做过…

windows编译ncnn

官方代码https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-windows-x64-using-visual-studio-community-2017 编译工具 visual studio 2017 一、编译protobuf 1、下载protobuf protobuf-3.11.2&#xff1a;https://github.com/google/protobuf/archive/v3.11…

指针初阶(超详解)

指针初阶 1.指针是什么2.指针和指针类型2.1 指针-整数2.2 指针的解引用 3.野指针3.1 野指针成因3.2如何避免野指针 4.指针运算4.1 指针-整数4.2 指针-指针4.3 指针的关系运算 5.指针和数组6.二级指针7.指针数组 1.指针是什么 指针是什么&#xff1f; 指针理解的2个要点&#xf…

Class.forName和ClassLoader区别

【反射中&#xff0c;Class.forName和ClassLoader区别】_lfsun666的博客-CSDN博客

docker启动报错:Cannot connect to the Docker daemon

Couldn’t connect to Docker daemon at httpdocker://localunixsocket - is it running? 解决方式&#xff1a;正确的是将当前用户加入docker组解决步骤 sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 ne…

SDWAN的技术背景及其发展历程

一、SDWAN&#xff08;软件定义广域网&#xff09;技术的背景 传统广域网&#xff08;WAN&#xff09;主要基于专线连接&#xff0c;例如MPLS&#xff08;多协议标签交换&#xff09;网络&#xff0c;用于连接企业的分支机构和总部。这些传统的WAN网络在过去是为了满足数据中心…

BladeX框架开源-工作-笔记-Docker部署-Jenkins配置

BladeX框架开源-工作-笔记-Docker部署-Jenkins配置 文章目录 BladeX框架开源-工作-笔记-Docker部署-Jenkins配置第一章-概要-BladeX框架简介与git地址第二章-BladeX框架前后端项目Docker部署与DockerFile配置文件2.1-开始部署阶段&#xff0c;默认服务器上面已有Nacos服务2.2-采…

maven下载按照及初次使用相关配置

maven下载按照及初次使用相关配置 一、下载 与安装 依赖Java&#xff0c;需要配置JAVA_HOME设置MAVEN自身的运行环境&#xff0c;需要配置MAVEN_HOME测试环境配置结果 MVN测试成功&#xff01;&#xff01;&#xff01; 二、本地仓库配置 Maven启动后&#xff0c;会自动保…

基于Amoeba读写分离(三十六)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 今天要学的是基于Amoeba读写分离。Amoeba是一个开源的关系型数据库管理系统&#xf…

Spark性能调优之数据序列化

前言 在使用Spark进行数据开发的时候,避不开的一个问题就是性能调优。网上一搜一大堆所谓的调优策略很多作者自己都不知所云,导致读者看了后只会更加困惑。我们在研究一个技术的时候第一手资料永远都请参考官网,官网对性能优化不一定是最全甚至最优,但是可以解决大部分问题…

六、初始化和清理(4)

本章概要 数组的初始化 动态数组创建可变参数列表 枚举类型 数组初始化 数组是相同类型的、用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。数组是通过方括号下标操作符 [] 来定义和使用的。要定义一个数组引用&#xff0c;只需要在类型名加上方括号&#xf…

NestJS 的 拦截器 学习

拦截器会用到RxJs&#xff0c;所以在学习拦截器之前可以先了解一下它。 拦截器是使用Injectable()装饰器装饰的类并且实现了接口NestInterceptor。 拦截器受到 AOP(面向切面编程)技术的启发&#xff0c;具有如下的功能&#xff1a; 在方法执行之前/之后绑定额外的逻辑转换函…

express学习笔记2 - 三大件概念

中间件 中间件是一个函数&#xff0c;在请求和响应周期中被顺序调用&#xff08;WARNING&#xff1a;提示&#xff1a;中间件需要在响应结束前被调用&#xff09; 路由 应用如何响应请求的一种规则 响应 / 路径的 get 请求&#xff1a; app.get(/, function(req, res) {res…