【Vim Masterclass 笔记10】S06L23:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第二部分)

文章目录

  • S06L23 Search, Find, and Replace - Part Two
    • 1 文本替换命令 `:s/old/new/`
    • 2 指定范围的文本替换
    • 3 特例:路径的替换
    • 4 文件行号的配置
    • 5 要点总结
      • (1)搜索当前行(Same Line Searching)
      • (2)跨行搜索(Searching)
      • (3)替换命令(Substitute Command)

写在前面
根据李笑来《自学是门手艺》的建议,梳理完知识要点后又对这章内容制作了 Xmind 思维导图,果然发现很多遗漏和生疏的细节。其实自学的很多诀窍都是老生常谈,观点普遍到几乎没人真正重视:预习、专注学习、复习、总结、学以致用……我们总以为看到的 99% 就是自学者的真实画像了,却往往忽略了重要性和比例(至少在自学这个问题上)并没有正相关的联系,所以才对这样的老生常谈不屑一顾。建议对 Vim 感兴趣的朋友也亲自整理一下思维导图,相信一定会有惊喜。

S06L23 Search, Find, and Replace - Part Two


本课同步练习文件:vimclass/searching.txt

1 文本替换命令 :s/old/new/

这里的 s 就是 substitute 的首字母,表示 “替换”。

例如,将下列文本行中的 net 替换为 org

DOMAIN=example.net                      # The example.net doma    in.

可以使用如下命令::s/net/org/

注意:末尾还有一个 /;并且该写法只能替换匹配的 第一个关键词

若要实现全局替换,需加全局标记 g,语法为::s/old/new/[flags],本例即为 :s/net/org/g

2 指定范围的文本替换

语法::[range]s/old/new/[flags],默认范围为 当前行

其中,[range] 范围有不同的写法:

  1. 具体行号。例如,将第 1 行的 is 替换为 isn't,使用命令::1s/is/isn't/
  2. 具体行号范围。例如,将 1 ~ 5 行中的 for 全部替换为 FOR:1,5s/for/FOR/
  3. 使用特殊行号标识:. 表示当前行,$ 表示最后一行。例如,从当前行到最后一行执行替换,[range] 部分写作:.,$
  4. % 表示所有行(即整个文件)。例如,将当前文件中的所有 net 替换为 org,写作::%s/net/org/g
  5. 范围的正则表示:[range] 部分语法为 /pattern-1/,/pattern-2/。例如,从包含 Global 的行开始,到包含 Local 的行结束,将 net 统一替换为 org:/Global/,/Local/s/net/org/g
  6. 也可以将 /pattern/ 和普通、特殊行号一起使用。例如,将 net 全部替换为 org,指定范围从 Local 开始、并到当前文件末尾结束,可以写作::/Local/,$s/net/org/g

3 特例:路径的替换

特殊情况下,如果需要用 :s/old/new/ 命令对 路径内容 进行替换,例如将 MAIL_PATH=/var/spool/mail 替换为 MAIL_PATH=/usr/local/mail。此时由于路径分隔符和 :s 命令的分隔符相同(如 LinuxUnixMacOS 等环境下),实现这类替换有两种方法:

  1. 常规方法:使用 \ 进行转义,写作::s/\/var\/spool/\/usr\/local/
  2. 使用其他字符作 :s 命令的分隔符,例如改为 #,写作::s#/var/spool#/usr/local#

第一种方法虽然简单,但可读性很差,也很容易出错。第二种方式更加简便灵活,因此强烈推荐使用第二种。除了用 # 分隔,还可以用管道符号 | 或者 : 进行分隔,只要是 单个的非数字、非字母字符(single non-alphanumberic character) 即可。

注意

其实 /var/spool 前面的 / 可以不参与替换,这样更简便。但为了更好地演示自定义 :s 命令的分隔符,还是决定保留下来以示区别。

4 文件行号的配置

本节反复提到文件行号的使用,是时候好好讲讲行号的配置了:

行号状态行号配置命令
开启行号:set nu
关闭行号:set nonu
查看当前状态:set nu?
切换行号开关:set nu!

注意:nu 的全称为 number,上述命令也可以使用 number 替换 nu。查看当前状态时,若未启用行号,Vim 状态栏将显示 nonumber;已开启行号则显示 number

图 1:使用 :set nu? 命令显示的不同 Vim 状态对比情况

【图 1:使用 :set nu? 命令显示的不同 Vim 状态对比情况】

5 要点总结

这是官方给的知识点梳理,感觉没我自己整理的思维导图细致(哈哈)

(1)搜索当前行(Same Line Searching)

  • f{char}:Forward search
  • F{char}:Reverse search
  • t{char}:Forward till search
  • T{char}:Reverse till search
  • ;:Repeat in the same direction
  • ,:Repeat in the opposite direction

(2)跨行搜索(Searching)

  • /{pattern}:Forward search
  • ?{pattern}:Reverse search
  • n:Repeat search in the same direction
  • N:Repeat search in the opposite direction
  • *:Forward search for word
  • #:Reverse search for word

(3)替换命令(Substitute Command)

语法::[range]s/{pattern}/{string}/[flags]

例如在当前文件内实现全局替换::%s/{pattern}/{string}/g

此外,还可以在命令前添加数量词 [count],或者与 motion 操作进行组合,实现更多灵活多变的替换效果。

最后,给出我自己归纳的 L22~L23 Vim 查找与替换的思维导图:

图 2:Vim 查找与替换部分(L22 + L23)思维导图

【图 2:Vim 查找与替换部分(L22 + L23】

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

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

相关文章

【计算机网络】课程 实验五 静态路由配置

实验五 静态路由配置 一、实验目的 理解静态路由的工作原理,掌握如何配置静态路由。 二、实验分析与设计 【背景描述】 假设校园网分为 2 个区域,每个区域内使用 1 台路由器连接 2 个子网, 现要在路由器上 做适当配置,实现校…

Linux下部署Redis(本地部署超详细)

非docker 1、下载Redis 历史版本: http://download.redis.io/releases 我的: http://download.redis.io/releases/redis-7.0.5.tar.gz 2.安装教程 1.Redis是基于c语言编写的需要安装依赖,需要安装gcc yum install gcc-c 2.查看gcc版…

Spring——几个常用注解

环境配置 1.在配置文件中导入约束(context — 共三个)并添加一项配置( context:annotation-config/) 才能支持注解的使用 context 约束: xmlns:context“http://www.springframework.org/schema/context” 2.xsi:schemaLocation下的:" http://ww…

Oopsie【hack the box】

Oopsie 解题流程 文件上传 首先开启机器后,我们先使用 nmap -sC -SV来扫描一下IP地址: -sC:使用 Nmap 的默认脚本扫描(通常是 NSE 脚本,Nmap Scripting Engine)。这个选项会自动执行一系列常见的脚本&am…

单片机-定时器中断

1、相关知识 振荡周期1/12us; //振荡周期又称 S周期或时钟周期(晶振周期或外加振荡周期)。 状态周期1/6us; 机器周期1us; 指令周期1~4us; ①51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器…

【蓝牙】win11 笔记本电脑连接 hc-06

文章目录 前言步骤 前言 使用电脑通过蓝牙添加串口 步骤 设置 -> 蓝牙和其他设备 点击 显示更多设备 更多蓝牙设置 COM 端口 -> 添加 有可能出现卡顿,等待一会 传出 -> 浏览 点击添加 hc-06,如果没有则点击 再次搜索 确定 添加成…

2 XDMA IP中断

三种中断 1. Legacy 定义:Legacy 中断是传统的中断处理方式,使用物理中断线(例如 IRQ)来传递中断信号。缺点: 中断线数量有限,通常为 16 条,限制了可连接设备的数量。中断处理可能会导致中断风…

【算法】时间复杂度以及O(N^2)的排序

目录 1.常数时间的操作 2.时间复杂度 2.1.以选择排序为例 2.2.O(n^2)从何而来 2.3.冒泡排序 2.3.1.抑或运算 2.4.插入排序 3.二分法 3.1.局部最小 4.递归 4.1.递归行为时间复杂度的估计 1.常数时间的操作 一个操作如果和样本的数据量无关,每次都是固定时…

C# 或 .NetCore 如何使用 NPOI 导出图片到 Excel 文件

今天在本文中,我们将尝试使用NPOI库将图像插入到 Excel 文件的特定位置。请将以下逻辑添加到您的写作方法中,在 Excel 文件中添加图像(JPEG、PNG),我已经有一个示例 jpeg 文件 - Read-write-excel-npoi.jpg ,我们将尝试…

Observability:将 OpenTelemetry 添加到你的 Flask 应用程序

作者:来自 Elastic jessgarson 待办事项列表可以帮助管理与假期计划相关的所有购物和任务。使用 Flask,你可以轻松创建待办事项列表应用程序,并使用 Elastic 作为遥测后端,通过 OpenTelemetry 对其进行监控。 Flask 是一个轻量级…

使用Matplotlib显示中文的方法

1 问题提出 使用图1所示的代码进行matplotlib绘图时,因为其默认不支持中文,此时无法显示正确内容,如图2所示。 图1 matplotlib绘图绘图代码 图2 matplotlib无法显示中文 2 问题解决 2.1 设置全局字体 在图1所示的代码中,第13…

详解opencv resize之INTER_LINEAR和INTER_AREA

一。先简单介绍一下resize的用法 src:输入图, dst:输出图 dsize:输出图的宽高,如果dsize不为空(即宽高都不是0),则以dsize为准进行resize。 fx, fy是放大缩小的比例,是…

UnityDemo-TheBrave-制作笔记

这是我跟着b站up主MStudio的视频学习制作的,大体上没有去做一些更新的东西,这里只是一个总的总结。在文章的最后,我会放上可以游玩该游戏的链接和exe可执行文件,不过没有对游戏内容进行什么加工,只有基本的功能实现罢了…

使用LSTM预测股票收盘价

在金融数据预测中,LSTM(长短期记忆网络)凭借其在时间序列数据建模中的优势,成为了分析股票价格趋势的热门选择。本篇博客将以完整的代码实现为例,展示如何利用LSTM网络对股票收盘价进行预测,并从数据处理到…

模拟SpringIOCAOP

一、IOC容器 Ioc负责创建,管理实例,向使用者提供实例,ioc就像一个工厂一样,称之为Bean工厂 1.1 Bean工厂的作用 先分析一下Bean工厂应具备的行为 1、需要一个获取实例的方法,根据一个参数获取对应的实例 getBean(…

预编译SQL

预编译SQL 预编译SQL是指在数据库应用程序中,SQL语句在执行之前已经通过某种机制(如预编译器)进行了解析、优化和准备,使得实际执行时可以直接使用优化后的执行计划,而不需要每次都重新解析和编译。这么说可能有一些抽…

软件测试预备知识⑥—搭建Web服务器

在软件测试的广阔领域中,搭建Web服务器是一项极为关键的技能。它不仅有助于模拟真实的应用环境,方便我们对Web应用进行全面且深入的测试,还能让测试人员更好地掌控测试场景,提升测试效率与质量。接下来,让我们一同深入…

计算机视觉算法实战——打电话行为检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​​​​​ ​​​​​​​​​​​​​​​ ​​​​​​ ​ 1. 引言✨✨ 随着智能手机的普及,打电话行为检测成为了计算机视…

Linux第二课:LinuxC高级 学习记录day01

0、大纲 0.1、Linux 软件安装,用户管理,进程管理,shell 命令,硬链接和软连接,解压和压缩,功能性语句,结构性语句,分文件,make工具,shell脚本 0.2、C高级 …

ISP流程--去马赛克详解

前言 本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知,彩色图像由一个个像元组成,每个像元又由红、绿、蓝(RGB)三通道构成。而相机传感器只能感知光的强度,无法直接感知光谱信息,即只有亮暗而没有颜色…