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

【vim】使用 gn 组合命令实现搜索选中功能

gn是Vim 7.4新增的一个操作(motion),作用是跳到并选中下一个搜索匹配项。
具体说,Vim里执行搜索后,执行n操作只会跳转到下一个匹配项,而不选中它。但是我们往往需要对匹配项执行一些修改操作,例如替换、删除或修改大小写等,如果先跳转再执行对应操作,会比较繁琐。gn可以和相应的操作结合,简化这些过程。
常用的组合有:

  • cgn: 删除下一个匹配项,并进入插入模式
  • dgn: 删除下一个匹配项,并保持常规模式

在执行搜索后通过使用 dgn 命令可以删除匹配项:

  1. 使用正则表达式 /\d\+\.\d\+\.\d\+\.\d\+ 搜索匹配的 ip
  2. 使用 :set hls 高亮匹配项
  3. 在 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实用技巧进阶
http://www.lryc.cn/news/488892.html

相关文章:

  • 【Python刷题】广度优先搜索相关问题
  • 竞赛思享会 | 2024年第十届数维杯国际数学建模挑战赛D题【代码+演示】
  • 早期超大规模语言模型的尝试——BLOOM模型论文解读,附使用MindSpore和MindNLP的模型和实验复现
  • 二分查找题目:有序数组中的单一元素
  • springboot基于Android的华蓥山旅游导航系统
  • 面向对象编程(OOP)深度解析:思想、原则与应用
  • iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录
  • 「OpenCV交叉编译」ubuntu to arm64
  • Stable Diffusion的解读(二)
  • amd显卡和nVidia显卡哪个好 amd和英伟达的区别介绍
  • 软件测试—— Selenium 常用函数(一)
  • 为什么verilog中递归函数需要定义为automatic?
  • 23种设计模式-状态(State)设计模式
  • EventListener与EventBus
  • Facebook为什么注册失败了?该怎么解决?
  • 前端数据可视化思路及实现案例
  • 【DVWA】Brute Force暴力破解实战
  • 23种设计模式速记法
  • 第7章硬件测试-7.3 功能测试
  • 动态规划子数组系列一>等差数列划分
  • 《Python浪漫的烟花表白特效》
  • 什么是RESTful API,有什么特点
  • 友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!
  • CSS中calc语法不生效
  • 国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程
  • ES6 模板字符串详解
  • 浏览器插件启动本地程序
  • Ubuntu ESP32开发环境搭建
  • 【gitlab】部署
  • vue中路由缓存