IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 正则表达式:在 Vim 中异于 Javascript 的用法 -> 正文阅读

[开发工具]正则表达式:在 Vim 中异于 Javascript 的用法

对于前后端各种编程语言中的正则表达式,开发者们已经再熟悉不过了;但如果你在使用 vim 编辑器,同样会在命令模式下遇到需要用正则实现搜索替换的情景。

往往在此时你会发现,这里的正则语法和 Javascript 等语言中虽然大部分相同,但还是有些差异,用起来处于一种 “会,但不完全会” 的奇怪叠加态。

今天我们就来稍微归纳一下 vim 中较独特的正则语法,为更好地使用这种编辑神器厘清障碍。

本文适用于较熟悉正则表达式和 vim 编辑器的读者,入门选手推荐先阅读以下文章:

搜索和替换标记

除了 gi 之外,在 vim 中还可以使用 c,用来交互式地对匹配项逐个替换。

比如在命令模式下输入 :%s/cat/Dog/gc 后回车,会得到一个 replace with Dog (y/n/a/q/l/^E/^Y)? 的提示,按 y 就表示 yes 替换,按 n 表示 no 跳过等

贪婪模式和懒惰模式

贪婪模式:

  • * 匹配前面的字符 0 次或多次

  • \+ 匹配前面的字符 1 次或多次

  • \?\= 匹配前面的字符 0 次或 1 次

  • \{number} 精确匹配指定次数

  • \{min,max} 匹配前面的字符最少 min 次或最多 max 次

非贪婪模式:

  • \{-} 匹配前面的字符 0 次或多次,比如对于字符串 'This is a sample text':

    • /h.\{-}s 会匹配到 'his'

    • /h.*s 则匹配到 'his is a s'

  • \{-min,max} 尽可能少地匹配 min 次到 max 次,也就是满足条件情况下能 min 尽量不 max

特殊字符

除了常见的 \s\W 等,vim 中一些独特的字符匹配如下:

  • \a 匹配字母,即 [a-zA-Z]

  • \A 匹配非字母,即 [^a-zA-Z]

  • \l 匹配小写字母,即 [a-z]

  • \L 匹配非小写字母,即 [^a-z]

  • \u 匹配大写字母,即 [A-Z]

  • \U 匹配非大写字母,即 [^A-Z]

  • \x 匹配十六进制字符,即 [0-9a-fA-F]

  • \X 匹配非十六进制字符,即 [^0-9a-fA-F]

多匹配和捕获模式

  • \| 可以用来匹配两个或更多个关键词

    • 比如 /abc\|123 会匹配到 'abc' 或 '123'

  • \(pattern\) 可以建立捕获分组,在替换段落中则用 \1, \2 依次表示捕获到的分组

单词边界

  • \<pattern 匹配单词的开始边界

  • pattern\> 匹配单词的结束边界

  • \<pattern\> 精确匹配整个单词

搜索模式调整符

  • \v 用来简化限定符、分组等里面的 \ 符号

    • /\vc{5} 精确匹配 'ccccc'

    • /\vabc+ 匹配 'abc' 或 'abccc'

    • /\vabc? 匹配 'ab' 或 'abc'

    • /\v<his> 精确匹配整个单词 'his'

    • /\vmin|max 匹配 'min' 或 'max'

    • /\vhand(y|ful) 匹配 'handy' 或 'handful'

    • /\v(\a)\1 匹配 'aa' 'bb' 'cc' 等

    • s/\v(\d+) (\d+)/\2 \1/ 将 '123 99' 替换为 '99 123'

  • \V 使得匹配特殊字符时不用 \ 符号

    • /V^.*$ 精确匹配字符串 ^.\*$

  • \c 忽略大小写搜索

  • \C 大小写敏感搜索

  • \%V 只对可视模式下光标选中的范围进行替换

    • s/\%Vcat/dog/g 会把选中范围内的 'cat' 换成 'dog'

    • 在可视模式按 ESC 变为命令模式时,命令输入行会自动生成 '<,'>,要先删去这一部分

替换并改变大小写

在替换段落中,可以使用以下符号

  • \u 将后面的一个字符变为大写

    • :% s/\v(\a+)/\u\1/g 会将文件中的所有英文单词变为首字母大写

    • :% s/\v(\w)_(\a+)/\1\u\2/g array_sum 变成 'arraySum'

  • \U 将后面的所有字符变为大写

    • :% s/\v(\a+)/\U\1/g 会将文件中的所有英文单词变为全大写

  • \l 将后面的一个字符变为小写

  • \L 将后面的所有字符变为小写

自定义分隔符

为了避免在搜索替换时使用过多的 / 所造成的混乱,可以使用诸如 #^$ 这样的其他符号替换 /,比如:

  • :% s#/project/adder/#/verilog/project/high_speed_adder/#g

参考资料

  • https://learnbyexample.gitbooks.io/vim-reference/content/Regular_Expressions.html


  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 16:53:33  更:2021-08-23 16:55:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 19:14:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码