当前位置: 首页 > news >正文

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

文章目录

  • 🌈 Ⅰ 基本概念
  • 🌈 Ⅱ 基本操作
    • 1. 进入 / 退出 vim
    • 2. vim 模式切换
  • 🌈 Ⅲ 命令模式
    • 1. 光标的移动
    • 2. 复制与粘贴
    • 3. 剪切与删除
    • 4. 撤销与恢复
  • 🌈 Ⅳ 底行模式
    • 1. 保存文件
    • 2. 查找字符
    • 3. 退出文件
    • 4. 替换内容
    • 5. 显示行号
    • 6. 外部命令
    • 7. 多文件操作
  • 🌈 Ⅴ 异常退出

🌈 Ⅰ 基本概念

  • 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. 保存文件

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

2. 查找字符

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

在这里插入图片描述

3. 退出文件

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

4. 替换内容

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

在这里插入图片描述

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

5. 显示行号

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

在这里插入图片描述

6. 外部命令

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

在这里插入图片描述

7. 多文件操作

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

在这里插入图片描述

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

🌈 Ⅴ 异常退出

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

在这里插入图片描述

1. 临时解决

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

在这里插入图片描述

2. 永久解决

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

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

在这里插入图片描述

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

在这里插入图片描述

相关文章:

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

文章目录 🌈 Ⅰ 基本概念🌈 Ⅱ 基本操作1. 进入 / 退出 vim2. vim 模式切换 🌈 Ⅲ 命令模式1. 光标的移动2. 复制与粘贴3. 剪切与删除4. 撤销与恢复 🌈 Ⅳ 底行模式1. 保存文件2. 查找字符3. 退出文件4. 替换内容5. 显示行号6. 外…...

KMP算法详解

1. 问题引入 链接:leetcode_28 题目:s1字符串是否包含s2字符串,如果包含返回s1中包含s2的最左开头位置,不包含返回-1 暴力方法就是s1的每个位置都做开头,然后去匹配s2整体,时间复杂度O(n*m) KMP算法可以…...

ubuntu22.04@laptop OpenCV Get Started: 013_contour_detection

ubuntu22.04laptop OpenCV Get Started: 013_contour_detection 1. 源由2. 应用Demo2.1 C应用Demo2.2 Python应用Demo 3. contour_approx应用3.1 读取图像并将其转换为灰度格式3.2 应用二进制阈值过滤算法3.3 查找对象轮廓3.4 绘制对象轮廓3.5 效果3.6 CHAIN_APPROX_SIMPLE v.s…...

[ai笔记5] 个人AI资讯助手实战

欢迎来到文思源想的ai空间,这是技术老兵重学ai以及成长思考的第5篇分享,也是把ai场景化应用的第一篇实操内容! 既然要充分学习和了解ai,自然少不了要时常看看ai相关资讯,所以今天特地用字节的“扣子”做了一个ai的资讯…...

QT+OSG/osgEarth编译之八十九:osgdb_ply+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_ply)

文章目录 一、osgdb_ply介绍二、文件分析三、pro文件四、编译实践一、osgdb_ply介绍 斯坦福三角形格式(Stanford Triangle Format)是一种用于存储三维模型数据的文件格式,也称为 PLY 格式。它最初由斯坦福大学图形实验室开发,用于存储和共享三维扫描和计算机图形数据。 P…...

机器人专题:我国机器人产业园区发展现状、问题、经验及建议

今天分享的是机器人系列深度研究报告:《机器人专题:我国机器人产业园区发展现状、问题、经验及建议》。 (报告出品方:赛迪研究院) 报告共计:26页 机器人作为推动工业化发展和数字中国建设的重要工具&…...

算法沉淀——哈希算法(leetcode真题剖析)

算法沉淀——哈希算法 01.两数之和02.判定是否互为字符重排03.存在重复元素04.存在重复元素 II05.字母异位词分组 哈希算法(Hash Algorithm)是一种将任意长度的输入(也称为消息)映射为固定长度的输出的算法。这个输出通常称为哈希…...

深入理解Redis哨兵原理

哨兵模式介绍 在深入理解Redis主从架构中Redis 的主从架构中,由于主从模式是读写分离的,如果主节点(master)挂了,那么将没有主节点来服务客户端的写操作请求,也没有主节点给从节点(slave&#…...

MySQL-存储过程(PROCEDURE)

文章目录 1. 什么是存储过程?2. 存储过程的优点3. MySQL中的变量3.1 系统变量3.2 用户自定义变量3.3 局部变量 4. 存储过程的相关语法4.1 创建存储过程(CREATE)4.2 查看存储过程(SHOW)4.3 修改存储过程(ALT…...

linux系统监控工具prometheus的安装以及监控mysql

prometheus 安装服务端客户端监控mysql prometheus浏览器查看 安装 https://prometheus.io/download/下载客户端和服务端以及需要监控的所有的包服务端 官网下载下载prometheustar -xf prometheus-2.47.2.linux-amd64.tar.gz -C /usr/local/ cd /usr/local/ mv prometheus-2.…...

初识tensorflow程序设计模式

文章目录 建立计算图tensorflow placeholdertensorflow数值运算常用的方法 tensorboard启动tensorboard的方法 建立一维与二维张量建立一维张量建立二维张量建立新的二维张量 矩阵的基本运算矩阵的加法矩阵乘法与加法 github地址https://github.com/fz861062923/TensorFlow 建…...

【QT+QGIS跨平台编译】之三十八:【GDAL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、gdal介绍二、文件下载三、文件分析四、pro文件五、编译实践一、gdal介绍 GDAL(Geospatial Data Abstraction Library)是一个用于读取、写入和处理地理空间数据的开源库。它支持多种栅格和矢量地理空间数据格式,包括常见的GeoTIFF、Shapefile、NetCDF、HDF5等,…...

黑马鸿蒙教程学习1:Helloworld

今年打算粗略学习下鸿蒙开发,当作兴趣爱好,通过下华为那个鸿蒙开发认证, 发现黑马的课程不错,有视频和完整的代码和课件下载,装个devstudio就行了,建议32G内存。 今年的确是鸿蒙大爆发的一年呀,…...

蓝桥杯每日一题------背包问题(四)

前言 前面讲的都是背包的基础问题,这一节我们进行背包问题的实战,题目来源于一位朋友的询问,其实在这之前很少有题目是我自己独立做的,我一般习惯于先看题解,验证了题解提供的代码是正确的后,再去研究题解…...

OpenAI发布Sora技术报告深度解读!真的太强了!

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:洲与AI。 🎈 本文专栏:本文收录…...

AJAX——接口文档

1 接口文档 接口文档&#xff1a;描述接口的文章 接口&#xff1a;使用AJAX和服务器通讯时&#xff0c;使用的URL&#xff0c;请求方法&#xff0c;以及参数 传送门&#xff1a;AJAX阶段接口文档 <!DOCTYPE html> <html lang"en"><head><meta c…...

leetcode hot100不同路径

本题可以采用动态规划来解决。还是按照五部曲来做 确定dp数组&#xff1a;dp[i][j]表示走到&#xff08;i&#xff0c;j&#xff09;有多少种路径 确定递推公式&#xff1a;我们这里&#xff0c;只有两个移动方向&#xff0c;比如说我移动到&#xff08;i&#xff0c;j&#x…...

【前端工程化面试题目】webpack 的热更新原理

可以在顺便学习一下 vite 的热更新原理&#xff0c;请参考这篇文章。 首先有几个知识点需要明确 热更新是针对开发过程中的开发服务器的&#xff0c;也就是 webpack-dev-serverwebpack 的热更新不需要额外的插件&#xff0c;但是需要在配置文件中 devServer属性中配置&#x…...

不花一分钱,在 Mac 上跑 Windows(M1/M2 版)

这是在 MacOS M1 上体验最新 Windows11 的效果&#xff1a; VMware Fusion&#xff0c;可以运行 Windows、Linux 系统&#xff0c;个人使用 licence 免费 安装流程见 &#x1f449; https://zhuanlan.zhihu.com/p/452412091 从申请 Fusion licence 到下载镜像&#xff0c;再到…...

Attempt to call an undefined function glutInit

Attempt to call an undefined function glutInit 解决方法&#xff1a; 从这里下载PyOpenGL 的whl安装文件&#xff0c; https://drive.google.com/drive/folders/1mz7faVsrp0e6IKCQh8MyZh-BcCqEGPwx 安装命令举栗 pip install PyOpenGL-3.1.7-cp39-cp39-win_amd64.whl pi…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...