vim搜索和替换

目录

  • 正则表达式
    • 1.特殊字符
    • 2.字符类(character-classes)
    • 3.规则
    • 4.交替和分组
    • 5.量词(quantifier)和重数(multi)
      • 贪婪模式(greedy)
      • 非贪婪模式(non-greedy)
    • 6.魔法(magic)详解
      • 6.1.基本魔法(magic)
      • 6.2.无魔法(no magic)
      • 6.3.深度魔法(very magic)
    • 7.正则表达式举例
      • 7.1.精确匹配单词
      • 7.2.变量,方法或类的重命名
    • 7.3.函数参数的重排列
  • 用参数列表处理多个文件
    • 命令
    • 举例
      • update
  • 行内搜索
    • 替换字符串
  • 搜索命令
    • 1.grep
    • 2.vimgrep
    • 3.ack
  • 替换命令
    • 命令形式
    • 举例
    • 转义

正则表达式

1.特殊字符

符号说明注释
.任意字符,但不包括行尾
^行首
$行尾
\_任意字符,包括行尾
\<单词开始
\>单词结尾
#完整列表
:help ordinary-atom

2.字符类(character-classes)

符号说明注释
\s一个空白字符(包括Tab和Space)
\d一个数字
\w一个单词
\l一个小写字符
\u一个大写字符
\a一个字母
  • 大写反类
  • :help character-classes

3.规则

  1. [] - 字符集合,例如[A-Z0-9],[,4abc]
  2. [^] - 补集,例如[^0-9A-Za-z]

4.交替和分组

符号说明注释
|交替(alternation)
\(\)分组(grouping)将多个字符放在一组
#同时匹配carrot和parrot
carrot\|parrot
#分组和其他正则表达式组合使用
\(c\|p\)arrot#分组匹配到的字符串还可以在后面的替换中重用
#'cat hunting mice'替换成'mice hunting cat'
:s/\(cat\) hunting \(mice\)/\2 hunting \1/

5.量词(quantifier)和重数(multi)

字符或字符区间后面接量词,也称为重数.

符号说明注释
*0或多个贪婪匹配模式
\+1或多个贪婪匹配模式
\{-}0或多个非贪婪匹配模式
\?或\=0或1个贪婪匹配模式
\{n,m}n~m个贪婪匹配模式
\{-n,m}n~m个非贪婪匹配模式
#量词的完整列表
:help multi

贪婪模式(greedy)

尽可能多地匹配字符

非贪婪模式(non-greedy)

尽可能少地匹配字符

#匹配一个或多个单词
\w\+#匹配2-4个连续的字符a
a\{2,4}#对于字符串'foo2bar2'#匹配'foo2bar2'
\w\+2#匹配'foo2
\w\{-1,}2

6.魔法(magic)详解

6.1.基本魔法(magic)

  • 默认模式
  • .和*之外,大部分特殊字符都需要转义
  • 显式设置:在正则表达式字符串前加上\m,例如/\mfoo或者:s/\mfoo/bar.

6.2.无魔法(no magic)

  • 所有特殊字符都需要转义,例如:在基本魔法时/^.*$,无魔法时为/\^\.\*\$
  • 显式设置:在正则表达式字符串前加上\M
  • .vimrc中设置:set nomagic,最好不要这样设置

6.3.深度魔法(very magic)

  • 将数字,字母,下划线之外的字符都视为特殊字符
  • 显式设置:在正则表达式前加上\v
  • 使用场合:特殊字符比较多
#将'cat hunting mice'替换成'mice hunting cat'#基本魔法
:%s/\(cat\) hunting \(mice\)/\2 hunting \1/g
#深度魔法
:%s/\v(cat) hunting (mice)/\2 hunting \1/g

7.正则表达式举例

7.1.精确匹配单词

#精确匹配单词
#搜索animal
#	/ - 正向搜索
#	\< - 单词开始
#	animal - 搜索的单词
#	\> - 单词结尾
/\<animal\>

7.2.变量,方法或类的重命名

#1.
:arg **/*.py#2.把光标移动到需要重命名的类上#3.
#[ctrl+r,ctrl+w]是快捷键,将光标下的单词插入当前命令中
:argdo %s/\<[ctrl+r,ctrl+w]\>/Pitbull/gec | update
#或者
:argdo %s/\<Dog\>/Pitbull/gec | update#4.
#y同意,n拒绝:args#先查看文件
:vimgrep /\<Dog\>/ **/*.py
:cn
:cp
:copen

7.3.函数参数的重排列

:arg **/*.py
#"\v<act>\(" 完整匹配 "act("
#'(\w{-1,}), ([^,]{-1,})\)' 匹配 'group1, group2)'
:argdo %s/\v<act>\((\w{-1,}), ([^,]{-1,})\)/act(\2, \1)/gec |update

用参数列表处理多个文件

(argument list, arglist)

支持多个文件执行同一操作.

每个参数列表项都在缓冲区列表中,但不是每个缓冲区都在参数列表中.

命令

命令说明注释
:arg定义参数列表
:argdo对参数列表中的所有文件执行一条命令
:args显示参数列表中的文件列表

举例

:arg **/*.py
#update 等价于 :write,用于保存被修改过的缓冲区
:argdo %s/\<animal\>/creature/ge | update
:args

update

vim切换缓冲区时推荐保存当前缓冲区.

另一种方案

#隐藏警告
:set hidden
#保存所有
:wa

行内搜索

命令说明注释
t后面接一个字符,用于当前行内搜索,光标在字符之前until
TT反向
f后面接一个字符,用于当前行内搜索,光标在字符之上find
FF反向
;重复下一个
,重复上一个

替换字符串

vim中替换字符串的方法有哪些

:%s/str1/str2/g

搜索命令

命令说明注释
/关键字正向搜索
?关键字反向搜索
n下一个next
N上一个
*搜索光标下的单词
:nohlsearch关闭搜索高亮单次
:grep跨文件搜索
:vimgrep跨文件搜索
:ack跨文件搜索

1.grep

2.vimgrep

:vimgrep <模式> <路径>#参考2.5.2 用/和?搜索
#当<路径>为"**"时,表示对目录进行递归
:vimgrep animal **/*.py#在不打开 quickfix,快速浏览quickfix
#下一个
:cn
:cnext
#上一个
:cp
:cprevious
:cN#打开quickfix列表
:copen
jk #上下移动
enter #打开
#退出quickfix
:q
ctrl+w,q

3.ack

sudo apt install ack-grep

Beyond grep: https://beyondgrep.com/

#递归搜索所有包含Animal的python文件
ack --python Animal#安装插件ack.vim后,在vim中执行,搜索结果显示在quickfix中
:Ack --python Animal
#注意第一个字母需要大写

替换命令

命令形式

#搜索和替代
:substitute
:<作用范围>s/<find-this>/<replace-with-this>/<flags>#flags:可以结合起来使用(除了i和I之外)
#	g - 全局替换
#	c - 每次替换前需要确认
#	e - 没有匹配项时不显示错误
#	i - 忽略大小写
#	I - 区分大小写#作用范围
#	% - 整个文件,替换完后,在状态栏显示多少个被替换
#	数字 - 表示行号
#	$ - 最后一行
#	/search-pattern/ - 搜索结果所在的行
#	?backwards-search-pattern? - 反向搜索结果行
#	; - 区间范围组合起来,例如17;$表示从17行到最后一行

举例

#使用cat代替首个dog
#没有指定范围
:s/cat/dog#整个文件全部匹配项代替,忽略大小写
:%s/cat/dog/gi#整个文件全部匹配项代替
:%s/java/python/g#作用范围:12行开始 - 搜索到dog为止
#此范围内匹配项全部替换
:12;/dog/s/animal/creature/g#可视模式下,选择区域作为作用范围
#此范围内匹配项全部替换
:s/cat/dog/g

转义

  • 转义 - 避免与替换命令的分隔符混淆
  • 修改替换命令的分隔符 - 避免混淆
#两种方式等价
#1.替换命令分隔符被修改为+
:s+path/to/dir+path/to/other/dir+gc
#2.使用\/转义
:s/path\/to\/dir/path\/to\/other\/dir/gc

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

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

相关文章

爬虫与DataFrame对象小小结合

import pandas as pd import requests from lxml import etree #数据请求 url"https://www.maigoo.com/brand/list_1715.html" headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari…

在Linux和Docker中使用nohup进行后台任务管理

在Linux和Docker中使用nohup进行后台任务管理 一、nohup应用场景二、nohup命令三、后台任务管理3.1 列出后台任务jobs3.2 后台任务转前台fg3.3 删除后台任务kill 一、nohup应用场景 在Linux操作系统&#xff08;Deepin、Ubuntu&#xff09;中&#xff0c;经常需要将程序长时间…

题目 2120: T1312-昆虫繁殖

题目描述: 科学家在热带森林中发现了一种特殊的昆虫&#xff0c;这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵&#xff0c;每对卵要过两个月长成成虫。假设每个成虫不死&#xff0c;第一个月只有一对成虫&#xff0c;且卵长成成虫后的第一个月不产卵(过X个月产卵)&#xf…

GPT实战系列-一种构建LangChain自定义Tool工具的简单方法

GPT实战系列-一种构建LangChain自定义Tool工具的简单方法 LLM大模型&#xff1a; GPT实战系列-探究GPT等大模型的文本生成 GPT实战系列-Baichuan2等大模型的计算精度与量化 GPT实战系列-GPT训练的Pretraining&#xff0c;SFT&#xff0c;Reward Modeling&#xff0c;RLHF …

PPT只要出现弹窗就闪退,Word和Excel都是正常的

1. 问题描述 PPT在常规使用下&#xff0c;能进行正常编辑和保存&#xff0c;但在使用过程中出现弹窗&#xff0c;类似于报错或者打开文件选项就会出现闪退&#xff0c;或者在添加新建页时选用右键添加时也会出现闪退。 找了很久的办法&#xff0c;才得到解决。记录一下。 2.…

vim寄存器和宏

目录 1.寄存器1.1.寄存器相关命令 2.宏2.1.宏的录制和回放2.1.1.避免宏回放回到开头重做2.1.2.先搜索 2.2.宏的编辑2.2.1.特殊字符 3.递归的宏4.跨文件运行宏 1.寄存器 寄存器说明注释a-z手动复制数据"寄存器"无名寄存器""p等效为p0-9最后10次删除操作的历…

windows安装ElasticSearch踩坑记

ElasticSearch是一个开源的分布式搜索和分析引擎。它提供实时分布式搜索功能&#xff0c;可以索引和搜索大量的结构化和非结构化数据。Elasticsearch以其速度、可伸缩性和处理复杂查询的能力而闻名。它常用于日志分析、全文搜索、文档搜索和数据分析等领域。使用ElasticSearch的…

稀碎从零算法笔记Day14-LeetCode:同构字符串

题型&#xff1a;字符串、哈希表 链接&#xff1a;205. 同构字符串 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那…

AI相关的实用工具分享

AI实用工具大赏&#xff1a;赋能科研与生活&#xff0c;探索AI的无限可能 前言 在数字化浪潮汹涌而至的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;无论是工作还是生活&#xff0c;都在悄然发生改变。AI的崛起不仅为我们带…

AHU 算法分析 实验四 动态规划

实验四&#xff1a;动态规划 实验目的 • 理解动态规划的基本思想&#xff0c;理解动态规划算法的两个基本要素最 优子结构性质和子问题的重叠性质。 • 熟练掌握典型的动态规划问题。 • 掌握动态规划思想分析问题的一般方法&#xff0c;对较简单的问题能正确 分析&#x…

网络故障基本判断方法

1&#xff09;电脑上使用winR键&#xff0c;打开运行窗口&#xff0c;输入CMD命令&#xff0c;点击回车键 2&#xff09;在弹出的CMD运行窗口中输入ipconfig命令 通过该命令可以查看本机的IP地址&#xff0c;子网掩码和网关等信息。确认电脑中所有网卡配置是否正确。 3&…

llc稳压基本思路2

这套控制思路实际上就是开关电源中常见的反馈系统 大致思路就是&#xff0c;如果由于其他参数波动引起了输出电压偏差&#xff0c;我们可以直接监测这个输出电压&#xff0c;然后根据输出电压与目标电压值的偏差信号传输给芯片&#xff0c;然后芯片来改变频率&#xff0c;从而改…

人工智能研究的各个学派

于对智能产生根源的理解不同形成了三大学派。 一、符号主义 符号主义&#xff08;Symbolism&#xff09;是人工智能研究中的一个重要学派&#xff0c;也被称为逻辑主义&#xff08;Logicism&#xff09;、心理学派&#xff08;Psychlogism&#xff09;或计算机学派&#xff08…

Flink StreamTask启动和执行源码分析

文章目录 前言StreamTask 部署启动Task 线程启动StreamTask 初始化StreamTask 执行 前言 Flink的StreamTask的启动和执行是一个复杂的过程&#xff0c;涉及多个关键步骤。以下是StreamTask启动和执行的主要流程&#xff1a; 初始化&#xff1a;StreamTask的初始化阶段涉及多个…

蓝桥杯2023年-接龙数列(dp)

题目描述 对于一个长度为 K 的整数数列&#xff1a;A1, A2, . . . , AK&#xff0c;我们称之为接龙数列当且仅当 Ai 的首位数字恰好等于 Ai−1 的末位数字 (2 ≤ i ≤ K)。 例如 12, 23, 35, 56, 61, 11 是接龙数列&#xff1b;12, 23, 34, 56 不是接龙数列&#xff0c;因为 …

前端学习之行内和块级标签

行内标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>span</title> </head> <body><!-- 行内标签特点&#xff1a;1、不换行,一行可以放多个2、默认宽度内容撑开代表&#…

[2023年]-hadoop面试真题(一)

&#xff08;北京&#xff09;HDFS底层存储原理? (北京) HDFS读写数据流程? (北京) HDFS如何管理元数据或者checkpoint的理解 ? (北京) HDFS常用命令 ? (北京) hadoop调优 (北京) HDFS扩容原理 (北京) HDFS有哪些进程,分别是什么? (北京) HDFS中大量小文件对…

Go实现日志2——支持结构化和hook

代码保存在&#xff1a;https://github.com/liwook/Go-projects/tree/main/log/sulogV2​​​​​​​ 1.日志结构化 日志记录的事件以结构化格式(键值对&#xff0c;或通常是 JSON)表示&#xff0c;随后可以通过编程方式对其进行解析&#xff0c;便于对日志进行监控、警报、…

Googlenet网络架构

原文链接&#xff1a;[1409.4842v1] Going Deeper with Convolutions (arxiv.org) 图源&#xff1a;深入解读GoogLeNet网络结构&#xff08;附代码实现&#xff09;-CSDN博客 表截自原文 以下&#x1f4d2;来自博客深入解读GoogLeNet网络结构&#xff08;附代码实现&#xff0…

【顶刊|修正】多区域综合能源系统热网建模及系统运行优化【复现+延伸】

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序复现《多区域综合能源系统热网建模及系统运行优化》模型并进一步延伸&#xff0c;基于传热学的基本原理建立了区域热网能量传输通用模型&#xff0c;对热网热损方程线性化实现热网能量流建模&#xff0…