【vim】使用 gn 组合命令实现搜索选中功能
gn是Vim 7.4新增的一个操作(motion),作用是跳到并选中下一个搜索匹配项。
具体说,Vim里执行搜索后,执行n操作只会跳转到下一个匹配项,而不选中它。但是我们往往需要对匹配项执行一些修改操作,例如替换、删除或修改大小写等,如果先跳转再执行对应操作,会比较繁琐。gn可以和相应的操作结合,简化这些过程。
常用的组合有:
- cgn: 删除下一个匹配项,并进入插入模式
- dgn: 删除下一个匹配项,并保持常规模式
在执行搜索后通过使用 dgn 命令可以删除匹配项:
- 使用正则表达式
/\d\+\.\d\+\.\d\+\.\d\+搜索匹配的 ip - 使用
:set hls高亮匹配项 - 在 normal 模式下使用
dgn可以删除当前匹配项,可以重复使用dgn删除后续的匹配项

同样,可以使用 cgn 可以编辑修改每个匹配项。
此外,可以将搜索与 gn 命令配合使用:
:g/\d\+\.\d\+\.\d\+\.\d\+/normal! "Aygn
1. :g 命令
:g 是Vim中的全局命令(global command),它用于在整个文件范围内对满足特定条件的行进行操作。其基本语法是 :g/{pattern}/[commands],这里的 {pattern} 是一个正则表达式模式,用于匹配要操作的行;[commands] 则是要对匹配到的行执行的具体操作。
2. 正则表达式 \d\+\.\d\+\.\d\+\.\d\+
这是一个用于匹配IP地址的正则表达式:
\d表示匹配数字字符。\d\+表示匹配一个或多个数字字符,这里用来匹配IP地址每一段中的数字部分。\.表示匹配小数点,因为在正则表达式中,点(.)本身是一个通配符,要匹配实际的小数点需要用反斜杠转义。- 整个表达式
\d\+\.\d\+\.\d\+\.\d\+就是用来匹配常见的IP地址格式,例如192.168.1.1这样由四个数字段用小数点分隔的形式。
3. normal! "Aygn
这是在 :g 命令中要对匹配到的行执行的具体操作:
-
normal!:表示接下来要执行的是普通模式下的命令序列。它确保执行的命令不会受到当前可能存在的映射(mappings)等的影响,按照Vim原本的普通模式命令逻辑来执行。 -
"Aygn:"A:指定寄存器A,在Vim中可以使用不同的寄存器来临时存储文本内容,这里是告诉Vim要把后续操作获取到的文本存到寄存器A中。ygn:这是一个常用的组合命令,y是复制(yank)命令,gn会自动作用于当前搜索到的匹配文本(在这种情况下,就是匹配到的IP地址),所以ygn整体的作用就是复制当前行中匹配到的IP地址。
综合起来,这条命令的完整作用是:在整个文件中,对于每一行中匹配到IP地址(按照 \d\+\.\d\+\.\d\+\.\d\+ 这个正则表达式模式匹配)的情况,在普通模式下执行操作,将该行中匹配到的IP地址复制到寄存器 A 中。
参考资料
- Practical Vim
- Vim实用技巧进阶
相关文章:
【vim】使用 gn 组合命令实现搜索选中功能
gn是Vim 7.4新增的一个操作(motion),作用是跳到并选中下一个搜索匹配项。 具体说,Vim里执行搜索后,执行n操作只会跳转到下一个匹配项,而不选中它。但是我们往往需要对匹配项执行一些修改操作,例…...
【Python刷题】广度优先搜索相关问题
题目描述 小A与小B 算法思路 小A一次移动一步,但有八个方向,小B一次移动两步,只有四个方向,要求小A和小B最早的相遇时间。用两个队列分别记录下小A和小B每一步可以走到的位置,通过一个简单的bfs就能找到这些位置并…...
竞赛思享会 | 2024年第十届数维杯国际数学建模挑战赛D题【代码+演示】
Hello,这里是Easy数模!以下idea仅供参考,无偿分享! 题目背景 本题旨在通过对中国特定城市的房产、人口、经济、服务设施等数据进行分析,评估其在应对人口老龄化、负增长趋势和极端气候事件中的韧性与可持续发展能力。…...
早期超大规模语言模型的尝试——BLOOM模型论文解读,附使用MindSpore和MindNLP的模型和实验复现
背景 预训练语言模型已经成为了现代自然语言处理pipeline中的基石,因为其在少量的标注数据上产生更好的结果。随着ELMo、ULMFiT、GPT和BERT的开发,使用预训练模型在下游任务上微调的范式被广泛使用。随后发现预训练语言模型在没有任何额外训练的情况下任…...
二分查找题目:有序数组中的单一元素
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:有序数组中的单一元素 出处:540. 有序数组中的单一元素 难度 4 级 题目描述 要求 给定一个仅由整数…...
springboot基于Android的华蓥山旅游导航系统
摘 要 华蓥山旅游导航系统是一款专为华蓥山景区设计的智能导览应用,旨在为用户提供便捷的旅游信息服务。该系统通过整合华蓥山的地理信息、景点介绍、交通状况等数据,实现了对景区的全面覆盖。用户可以通过该系统获取实时的旅游资讯、交流论坛、地图等。…...
面向对象编程(OOP)深度解析:思想、原则与应用
🚀 作者 :“码上有前” 🚀 文章简介 :Java 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 面向对象编程(OOP)深度解析:思想、原则与应用 一、面向对象编程的基本…...
iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录
我们姑且将这款iPhone 17序列的超薄SKU称为“iPhone 17 Air”,Jeff Pu在报告中提到,我同意最近关于 iPhone 17超薄机型采用6 毫米厚度超薄设计的传言。 如果这一测量结果被证明是准确的,那么将有几个值得注意的方面。 首先,iPhone…...
「OpenCV交叉编译」ubuntu to arm64
Ubuntu x86_64 交叉编译OpenCV 为 arm64OpenCV4.5.5、cmake version 3.16.3交叉编译器 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu 可在arm或linaro官网下载所需版本,本文的交叉编译器可点击链接跳转下载 Downloads | GNU-A Downloads – Arm Developer L…...
Stable Diffusion的解读(二)
Stable Diffusion的解读(二) 文章目录 Stable Diffusion的解读(二)摘要Abstract一、机器学习部分1. 算法梳理1.1 LDM采样算法1.2 U-Net结构组成 2. Stable Diffusion 官方 GitHub 仓库2.1 安装2.2 主函数2.3 DDIM采样器2.4 Unet 3…...
amd显卡和nVidia显卡哪个好 amd和英伟达的区别介绍
AMD和英伟达是目前市场上最主要的两大显卡品牌,它们各有自己的特点和优势,也有不同的适用场景和用户群体。那么,AMD显卡和英伟达显卡到底哪个好?它们之间有什么区别?我们又该如何选择呢?本文将从以下几个方…...
软件测试—— Selenium 常用函数(一)
前一篇文章:软件测试 —— 自动化基础-CSDN博客 目录 前言 一、窗口 1.屏幕截图 2.切换窗口 3.窗口设置大小 4.关闭窗口 二、等待 1.等待意义 2.强制等待 3.隐式等待 4.显式等待 总结 前言 在前一篇文章中,我们介绍了自动化的一些基础知识&a…...
为什么verilog中递归函数需要定义为automatic?
直接上代码 module automatic_tb;reg [7:0] value;initial begin #0 value < 8d5;#10 $display("result of automatic: %0d", factor_automatic(value));$display("result of static: %0d", factor_static(value));#50 $stop; endfunction reg[7:0] fa…...
23种设计模式-状态(State)设计模式
文章目录 一.什么是状态模式?二.状态模式的结构三.状态模式的应用场景四.状态模式的优缺点五.状态模式的C实现六.状态模式的JAVA实现七.代码解释八.总结 类图: 状态设计模式类图 一.什么是状态模式? 状态模式(State Pattern&…...
EventListener与EventBus
EventListener JDK JDK1.1开始就提供EventListener,一个标记接口,源码如下: /*** A tagging interface that all event listener interfaces must extend.*/ public interface EventListener { }JDK提供的java.util.EventObject࿱…...
Facebook为什么注册失败了?该怎么解决?
有时候用户在尝试注册Facebook账号时可能会遇到各种问题,导致注册失败或遇到困难。小编会为大家分析Facebook注册失败的可能原因,并提供解决方法,帮助大家顺利完成注册流程。 一、Facebook注册失败的可能原因 1. 账号信息问题: …...
前端数据可视化思路及实现案例
目录 一、前端数据可视化思路 (一)明确数据与目标 (二)选择合适的可视化图表类型 (三)数据与图表的绑定及交互设计 (四)页面布局与样式设计 二、具体案例:使用 Ech…...
【DVWA】Brute Force暴力破解实战
问尔辈 何等样人 自摸心头 再来求我;若汝能 克存忠孝 持身正直 不拜何妨 1.Brute Force(Low) 相关的代码分析 if( isset( $_GET[ Login ] ) ) {// Get username$user $_GET[ username ];// Check the database$query "SELECT * FROM users WHERE user $…...
23种设计模式速记法
前言 在软件开发的过程中,设计模式作为解决常见问题的通用模板,一直是开发者的重要工具。尤其是在面临复杂系统架构和需求变化时,设计模式不仅能够提升代码的可复用性和扩展性,还能大大提高团队之间的协作效率。然而,…...
第7章硬件测试-7.3 功能测试
7.3 功能测试 7.3.1 整机规格测试7.3.2 整机试装测试7.3.3 DFX测试 功能测试包括整机规格、整机试装和整机功能测试,是整机结构和业务相关的测试。 7.3.1 整机规格测试 整机规格测试包括尺寸、重量、温度、功耗等数据。这些测试数据与设计规格进行比对和校验&…...
基于LLM与RAG的法律AI工具:从架构解析到工程实践
1. 项目概述:一个法律文本智能生成与分析的AI工具最近在和一些做法律科技的朋友聊天时,他们反复提到一个痛点:处理海量的、格式固定的法律文书,比如起诉状、合同、律师函,既耗时又容易在细节上出错。人工起草一份严谨的…...
【C++ 多态】虚函数 · 虚表 · 重写,一篇彻底弄明白!
C 多态详解 C多态是面向对象的核心灵魂,本文将由浅入深,带你循序渐进地掌握多态的方方面面,全程干货,坐稳发车~ ദ്ദി˶ー̀֊ー́ )✧ 文章目录C 多态详解1. 什么是多态?2. 运行时多态的实现前…...
ArcGIS 10.2 保姆级安装与破解教程(含License Manager启动失败解决方案)
ArcGIS 10.2 完整安装指南:从零开始到完美运行 1. 准备工作与环境检查 在开始安装ArcGIS 10.2之前,确保你的系统满足以下基本要求: 操作系统:Windows 7/8/10(32位或64位)硬件配置:至少4GB RAM&a…...
AI原生多任务学习效能跃迁路径(SITS 2026工业级调参手册)
更多请点击: https://intelliparadigm.com 第一章:AI原生多任务学习:SITS 2026多目标优化实战技巧 在 SITS 2026 挑战赛中,AI 原生多任务学习(MTL)不再仅是共享底层表征的工程权衡,而是以任务语…...
5个Zutilo技巧让你成为Zotero文献管理高手
5个Zutilo技巧让你成为Zotero文献管理高手 【免费下载链接】Zutilo Zotero plugin providing some additional editing features 项目地址: https://gitcode.com/gh_mirrors/zu/Zutilo 还在为Zotero的批量操作烦恼吗?每天面对成百上千的文献条目,…...
当AI学会“看”画质:用Python和PyTorch动手实现一个无参考图像质量评估模型
用Python和PyTorch构建无参考图像质量评估模型:从理论到实践 在数字图像爆炸式增长的时代,图像质量评估(IQA)技术正成为计算机视觉领域不可或缺的一环。无论是社交媒体平台的内容审核、医疗影像的自动分析,还是监控系统的实时画面处理&#x…...
常闭式防火门,关严才是安全门|90% 的火灾隐患源于忽视它
常闭式防火门,关严才是真正的安全门!现实里 90% 的消防火灾隐患,都源于常闭式防火门长期敞开、随意封堵、私自固定不关。很多人觉得开门方便通行、搬货省事,却忽略了它的核心作用:防火隔烟、阻隔火势、延缓蔓延、守护疏…...
从零搭建AI增强型第二大脑:NotebookLM+Obsidian+Dataview三体联动,7天知识处理效率提升3.8倍
更多请点击: https://intelliparadigm.com 第一章:NotebookLM与Obsidian整合的底层逻辑与价值定位 NotebookLM 与 Obsidian 的整合并非简单插件叠加,而是基于“语义增强型知识工作流”的范式迁移。其底层逻辑根植于双引擎协同:No…...
利用MCP协议与Crypto APIs为AI助手集成多链交易数据查询能力
1. 项目概述:一个为AI助手注入区块链洞察力的MCP服务器 如果你和我一样,日常开发中经常需要查询不同区块链上的交易详情——比如验证一笔以太坊上的USDT转账是否成功,或者追溯某个比特币地址的资金来源——那你肯定体会过在十几个浏览器标签…...
基于GitHub Actions打造自动化工作流:测试、构建、部署
从手工到自动化的测试交付变革在软件研发流程中,测试从来不是孤立环节。每一次代码提交,都可能触发一轮新的构建、部署与验证。传统模式下,测试人员往往需要等待开发手动打包、手动部署到测试环境,再通过人工触发或定时执行测试脚…...
