在 Vim 中忽略部分搜索模式中的大小写
Posted
技术标签:
【中文标题】在 Vim 中忽略部分搜索模式中的大小写【英文标题】:Ignore the case in part of the search pattern in Vim 【发布时间】:2020-05-28 08:20:02 【问题描述】:在Vim的下一次搜索中,我想忽略第一个字母的大小写:
/[tlcp]omo
我想知道如何仅对搜索模式的第一个字母忽略大小写。
Vim 有以下选项可以忽略搜索模式中的大小写:
:set ignore
:set smartcase [ignore case if no uppercase in search]
或在搜索模式中的任何位置使用\c
:
/hello\c => [find hello and HELLO]
但所有这些选项都忽略了整个模式中的大小写,而不是部分。
在搜索模式中忽略单个字母大小写的一个选项是,使用正则表达式的[]
集合,专门将每个字母大写:
/[tTlLcCpP]omo
但是,有什么方法可以忽略部分搜索模式中的大小写,而不必使用正则表达式指定每个大小写字符?
【问题讨论】:
我想***.com/q/2287440/2191572 有您正在寻找的答案,从我的快速概述来看,使用 Vim 似乎无法实现您的边缘案例请求。 我不熟悉VIM
,但是内联修饰符会按照this 工作吗?
如果您使用\c
后跟\C
每***.com/a/2287449/2191572 会发生什么?它会像@JvdV 提到的内联修饰符那样起作用吗?
@sergio OP 明确提到他们希望避免写出所有小写字符及其大写变体。
也许VIM
中有一种方法可以将第一个字符更改为Ucase
或Lcase
内联。将此反馈给您的RegEx
?
【参考方案1】:
一般来说,这在 Vim 中是不可能的。不幸的是,/\c
和 /\C
正则表达式修饰符将整个模式转换为区分大小写的匹配,无论它们放在哪里。 (在我看来,引入一组仅从该位置开始起作用的新修饰符将是最佳解决方案。)
大多数人通常通过对不敏感部分使用小写/大写 集合 来解决这个问题,/like [tT][hH][iI][sS]/
。
您也可以走相反的路线,而是将某些字符强制为大小写(使用/\l
表示小写,/\u
表示大写),/\c\%(\l\l\l\l\&like\) this/
。
【讨论】:
In this link (in spanish),一位同事遇到了类似的情况。 在 Vim 中没有可能的解决方案。【参考方案2】:我的CmdlineSpecialEdits plugin 具有(以及许多其他)CTRL-G c
映射,它转换搜索命令行中的模式,使\c
...\C
之间的字母字符不区分大小写匹配,而其余部分仍然区分大小写。换句话说,它将模式转换为好像\c
和\C
只适用于后面的原子,而不是整个模式。
示例
/My \cfoo\C is \cbad!/
变成
/My [fF][oO][oO] is [bB][aA][dD]!/
或者
/\c\%(\u\&M\)\%(\l\&y\) foo\%(\l\2\&is\) bad!/
【讨论】:
以上是关于在 Vim 中忽略部分搜索模式中的大小写的主要内容,如果未能解决你的问题,请参考以下文章