【Linux 04】编辑器 vim 详细介绍

文章目录

  • 🌈 Ⅰ 基本概念
  • 🌈 Ⅱ 基本操作
    • 1. 进入 / 退出 vim
    • 2. vim 模式切换
  • 🌈 命令模式
    • 1. 光标的移动
    • 2. 复制与粘贴
    • 3. 剪切与删除
    • 4. 撤销与恢复
  • 🌈 Ⅲ 底行模式
  • 🌈 Ⅳ 异常退出

🌈 Ⅰ 基本概念

  • vim 是一种 Linux 专门用来编写代码的多模式文本编辑器工具。
  • vim 分别有命令、插入、底行三种模式,其功能区分如下:

1.命令模式

  • 也称为 [ 普通模式 ] 或 [ 正常模式 ]
  • 不能直接对文件进行编辑,只能通过快捷键进行对文本的编辑控制

2. 插入模式

  • 在该模式下才可以对文本进行编辑,也就是俗称的编辑模式

3. 底行模式

  • 对文件的保存或退出,也能用来进行文件替换,找字符串,列出行号等操作。
  • 在命令模式下,按下 shift + ; (也就是冒号 : ) 即可进入该模式。

🌈 Ⅱ 基本操作

1. 进入 / 退出 vim

进入 vim

  • 输入 vim + 文件名后就会进入对该文件的编辑界面。
  • 在进入 vim 之后,默认处于 [ 命令模式 ],切换到 [ 插入模式 ] 才能编辑该文本。

在这里插入图片描述

退出 vim

在 [ 底行模式 ] 下输入下列指令,就能以不同的方式退出 vim。

  • q:未修改文件时,直接退出。
  • q!:修改过文件时,不进行保存,强制退出。
  • wq:修改过文件时,保存对文件的编辑然后退出。

2. vim 模式切换

  • 注意:[ 插入模式 ] 与 [ 底行模式 ] 无法直接进行切换,需要借助 [ 命令模式 ] 进行中转。

1. 切换至命令模式

  • 进入 vim 时,默认处于 [ 命令模式 ]。
  • 如果处在 [ 插入模式 ] 或者 [ 底行模式 ] 时,直接按下 ESC即可。

2. 切换至插入模式

  • 在 [ 命令模式 ] 下,直接按下以下指令就能以不同的形式进入 [ 插入模式 ] 。
选项说明
i在光标所在字符的前面开始插入
a在光标所在字符的后面开始插入
o在光标所在行的下一行开始插入
l在光标所在行的头部开始插入,若头部有空格则在空格后插入
A在光标所在行的末尾开始插入
O在光标所在行的上一行开始插入
S删除光标所在行并开始插入

3. 切换至底行模式

  • 在英文输入法的前提下输入shift + 分号 ; 就是输入冒号 : 而已。

🌈 命令模式

  • 以下操作都是在 [ 命令模式 ] 下使用快捷键进行的

1. 光标的移动

  • 现有一个光标处在如下位置的文件,可以在命令模式下执行对应指令移动光标。

在这里插入图片描述

移动光标指令

  1. h:将光标向左移动
  2. j:将光标向下移动
  3. k:将光标向上移动
  4. l:将光标向右移动
  5. w:以单词为单位进行光标后移
  6. b:以单词为单位进行光标前移
  7. ^:将光标移动到光标所在行的开头
  8. $:将光标移动到光标所在行的结尾
  9. gg:将光标移动到当前文件的首行
  10. G:将光标移动到当前文件的尾行
  11. ctrl + b:向上翻屏,前提是文件内容够多
  12. ctrl + f:向下翻屏。前提是文件内容够多
  13. 数字 + G:将光标移动到指定行

2. 复制与粘贴

复制

  • 复制单行:yy,复制当前光标所在行
  • 复制多行:数字 + yy,从光标指定行开始向下复制指定行数。

粘贴

  • 粘贴单次:p,从光标当前所处位置的下一行开始粘贴。
  • 粘贴多次:数字 + p,将复制的内容粘贴指定次。

示例:使用 2 + yy 从第五行开始向下复制两行,然后使用 3 + p,将复制的内容粘贴三遍在第六行的下一行。

在这里插入图片描述

3. 剪切与删除

剪切

  • 剪切单行:
    • dd,剪切光标所在行,同时将下一行上移填补被剪切的空缺。
    • d,只剪切光标所在行,但后面内容不会上移。
  • 剪切多行:数字 + dd,从光标所在行向下剪切指定行,后面行会上移。

删除

  • 删除整行:剪切之后不粘贴自然就是删除了。

在这里插入图片描述

  • 行内往后局部删除
    • x:删除光标后面的一个字符。
    • 数字 + x:在一行内,删除从光标处开始往后的 n 个字符。

在这里插入图片描述

  • 行内往前局部删除
    • X:删除光标前面的一个字符。
    • 数字 + X:在一行内,删除光标前的 n 个字符。

在这里插入图片描述

4. 撤销与恢复

撤销

  • u:撤销上一步执行的操作,类似于 Windows 的 ctrl + z

恢复

  • ctrl + r:取消之前执行的撤销操作,类似于 Windows 的 ctrl + y

🌈 Ⅲ 底行模式

  • 注意:在执行下面的操作前需要先输入英文的冒号 : 进入底行模式

保存文件

  1. w:保存当前文件。
  2. w 文件路径:另存为指定文件。

查找字符

  • /关键字:往后查找第一个匹配的关键字。
  • ?关键字:往前查找第一个匹配的关键字。

在这里插入图片描述

退出文件

  1. q:若未对文件进行修改,可直接使用 q 退出文件。
  2. q!:若已对文件进行修改,不保存并且强制退出文件。
  3. wq:保存并退出当前文件

替换内容

现有一份初始内容如下的文件:

在这里插入图片描述

  1. 😒/搜索的内容/指定内容:用指定内容替换光标所在行 第一个 被搜索到的内容。
  2. 😒/搜索的内容/指定内容/g:用指定内容替换 光标所在行 全部被搜多到的内容。
  3. %s/搜索的内容/指定内容:用指定内容替换 整个文件 每一行第一个被搜索到的内容。
  4. %s/搜索的内容/指定内容/g:用指定内容替换整个文件 全部 被搜索到的内容。

显示行号

  • set nu:显示的行号是暂时的,下次再打开该文件时不会显示。

在这里插入图片描述

外部命令

  • 可以不用退出 vim 在命令行执行基本操作指令。
  • 在 vim 界面的底行模式可以使用 ! 指令 的方式调用外部命令。

在这里插入图片描述

多文件操作

  • 在当前文件工作时,vim 不能像 vs 那样直接切换到其他文件进行操作 。
  • 此时可以使用 vs 文件名,分屏打开其他文件进行操作。

在这里插入图片描述

  • 分频模式下如何编辑文件:光标在哪个文件就是对哪个文件进行操作。
  • 切换光标 (切换操作文件):ctrl + ww

🌈 Ⅳ 异常退出

  • 编辑中的文件未保存直接退出就是异常退出
  • 见的最多的异常退出就是在命令模式下不小心 ctrl + z 之后,之后再打开文件就会出现以下情况。

在这里插入图片描述

1. 临时解决

  • 按下 q 之后出现以下信息,输入 E 或者 R 就能进入文件,但是之后还是会出现该提示。

在这里插入图片描述

2. 永久解决

  • 异常退出只是将 vim 暂停,此时 vim 变成了一个后端任务,并没有真的退出。一个 Linux 文件只能被一个程序打开。
  • 在异常退出 vim 时,vim 会自动在当前目录下生成一个隐藏的==.swp 临时文件==方便恢复数据。
  • 这个临时文件会一直占着 vim,只要删除该临时文件即可。

隐藏文件的名字已经在提示时给出了。

在这里插入图片描述

  • 知道了隐藏文件的名字之后只需要使用 rm 指令删除该文件即可。

在这里插入图片描述

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

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

相关文章

第7章 Page446~449 7.8.9智能指针 std::unique_ptr

“unique_ptr”是“独占式智能指针” 名字透露身份&#xff0c;“unique_ptr”是“独占式智能指针”。使用它管理前面的O类指针&#xff1a; 演示1&#xff1a; 例中 p 是一个智能指针。其中的“<O>”指明它所指向的数据类型是“O”。除了创建方法不太一样&#xff0c;…

SAP PP学习笔记- 豆知识02 - 品目要谁来维护?怎么决定更不更新品目的数量金额?

其实都是在品目类型的Customize中设定的。 咱们这里简单试着说一下什么场景使用。 1&#xff0c;SAP中品目有很多View&#xff0c;都要由哪些部门来维护呢&#xff1f; 其实就是谁用谁维护呗。 在新建一个品目的时候&#xff0c;品目Type本身就决定了该品目要由哪些部门来维…

gem5 garnet 合成流量: packet注入流程

代码流程 下图就是全部. 剩下文字部分是细节补充,但是内容不变: bash调用python,用python配置好configuration, 一个cpu每个tick运行一次,requestport发出pkt. bash 启动 python文件并配置 ./build/NULL/gem5.debug configs/example/garnet_synth_traffic.py \--num-cpus…

【C++】---类和对象(上)入门

一、类的定义 1.那么众所周知&#xff0c;C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解的步骤&#xff0c;通过函数的调用来逐步解决问题 2.而C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间交…

消息队列RabbitMQ-使用过程中面临的问题与解决思路

消息队列在使用过程中会出现很多问题 首先就是消息的可靠性&#xff0c;也就是消息从发送到消费者接收&#xff0c;消息在这中间过程中可能会丢失 生产者到交换机的过程、交换机到队列的过程、消息队列中、消费者接收消息的过程中&#xff0c;这些过程中消息都可能会丢失。 …

【数据结构】LRU Cache

文章目录 LRUCache LRUCache 1. LRUCache是一种缓存的替换技术&#xff0c;在CPU和main memory之间根据计算机的局部性原理&#xff0c;往往会采用SRAM技术来构建CPU和主存之间的高速缓存&#xff0c;DRAM(dynamic random access memory)用于构建主存&#xff0c;LRUCache这种…

【正点原子STM32】TIMER 定时器(软件定时原理、定时器定时原理、分类和特性、基本定时器(影子寄存器和U事件和UI中断))

一、定时器概述 1.1、软件定时原理1.2、定时器定时原理1.3、STM32定时器分类1.4、STM32定时器特性表1.5、STM32基本、通用、高级定时器的功能整体区别 二、基本定时器 2.1、基本定时器简介2.2、基本定时器框图2.3、定时器计数模式及溢出条件2.4、定时器中断实验相关寄存器2.…

【数据结构】二叉树的三种遍历

目录 一、数据结构 二、二叉树 三、如何遍历二叉树 一、数据结构 数据结构是计算机科学中用于组织和存储数据的方式。它定义了数据元素之间的关系以及对数据元素的操作。常见的数据结构包括数组、链表、栈、队列、树、图等。 数组是一种线性数据结构&#xff0c;它使用连续…

[Vue warn]: Duplicate keys detected: ‘1‘. This may cause an update error.

[Vue warn]: Duplicate keys detected: ‘1‘. This may cause an update error.——> Vue报错&#xff0c;key关键字不唯一&#xff1a; 解决办法&#xff1a;修改一下重复的id值&#xff01;&#xff01;&#xff01;

C#系列-使用 Minio 做图片服务器实现图片上传 和下载(13)

1、Minio 服务器下载和安装 要在本地安装和运行 MinIO 服务器&#xff0c;你可以按照以下 步骤进行操作&#xff1a; 1. 访问 MinIO 的官方网站&#xff1a;https://min.io/&#xff0c;然后 点击页面上的”Download”按钮。 2. 在下载页面上&#xff0c;选择适合你操作系统的 …

(16)Hive——企业调优经验

前言 本篇文章主要整理hive-3.1.2版本的企业调优经验&#xff0c;有误请指出~ 一、性能评估和优化 1.1 Explain查询计划 使用explain命令可以分析查询计划&#xff0c;查看计划中的资源消耗情况&#xff0c;定位潜在的性能问题&#xff0c;并进行相应的优化。 explain执行计划…

[C#] 如何调用Python脚本程序

为什么需要C#调用python&#xff1f; 有以下几个原因需要C#调用Python&#xff1a; Python拥有丰富的生态系统&#xff1a;Python有很多强大的第三方库和工具&#xff0c;可以用于数据科学、机器学习、自然语言处理等领域。通过C#调用Python&#xff0c;可以利用Python的生态系…

HiveSQL——统计当前时间段的有客人在住的房间数量

注&#xff1a;参考文章&#xff1a; HiveSQL一天一个小技巧&#xff1a;如何统计当前时间点状态情况【辅助变量累计变换思路】_sql查询统计某状态出现的次数及累计时间-CSDN博客文章浏览阅读2k次&#xff0c;点赞6次&#xff0c;收藏8次。本文总结了一种当前时间点状态统计的…

【JAVA-Day86】守护线程

守护线程 守护线程摘要引言1. 了解守护线程&#xff1a;它是什么&#xff1f;&#x1f47b;特点和用途示例代码 2. 为何我们需要守护线程&#xff1f;&#x1f47b;辅助性任务处理不阻止程序的正常运行重要的清理工作示例代码&#x1f4da; 3. 如何创建和管理守护线程&#xff…

QT 工具栏 状态栏 停靠部件 核心部件

添加/删除工具栏 删除工具栏方法和删除菜单栏方法一样&#xff0c;不过工具栏可以有多个&#xff0c;所以每次右键MainWindow对象&#xff0c;都可以看到添加工具栏的选项。 工具栏添加动作 新添加的QAction对象会在动作编辑器里找到&#xff08;Action Editor&#xff09;&a…

Java毕业设计-基于springboot的学院物资管理系统-第73期

获取源码资料&#xff0c;请移步从戎源码网&#xff1a;从戎源码网_专业的计算机毕业设计网站 项目介绍 基于springboot的学院物资管理系统&#xff1a;前端thymeleaf、jquery、layui&#xff0c;后端 maven、springmvc、spring、mybatis&#xff0c;有配套报告文档&#xff…

微信小程序的疑惑总结

未解决&#xff1a; 1.storebindings 这里的storebindings是什么 2.空行怎么写&#xff1f; 我用这个<text>\n</text>写&#xff0c;在模拟器上好使&#xff0c;在真机上显示\n 解决方法&#xff1a;在组件里写class类名&#xff0c;wxss里面改高度 已解决&am…

LD-802D-X6

LD-802D-X6足浴按摩器&#xff0c;买个给老人家&#xff0c;解决泡脚越泡越冷&#xff0c;调节温度和定式问题&#xff0c; 按摩功能老人体验说太痒&#xff0c;转太快了&#xff0c;哈哈 下面是安装步骤使用说明 其实这包零件就是安装底部4个轮子&#xff0c;4个轮子的中间滚…

【分享】图解ADS+JLINK调试ARM

文章是对LPC2148而写的&#xff0c;但是对三星的44B0芯片同样适用&#xff0c;只需要在选择时将相应的CPU选择的S3C44B0就可以了。 JLINK在ADS下调试心得 前两天一个客户用jlink在ADS下调试LPC2148总报错&#xff0c;这个错误我之前在调试LPC2200的时候也碰到过&#xff0c;后…

Nuxt3+Vue3(Composition API)+TS+Vite+Ant Design Vue 搭建

最近官网搭建选择了nuxtjs&#xff0c;由于框架更新了&#xff0c;其中语法也有很多变化&#xff0c;中间遇到了一些问题点做下总结。 nuxt3官方文档地址&#xff1a;https://nuxt.com/docs/getting-started/installation 安装 在安装Nuxt3之前&#xff0c;你需要保证你的nod…