在 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 中有一种方法可以将第一个字符更改为UcaseLcase 内联。将此反馈给您的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 中忽略部分搜索模式中的大小写的主要内容,如果未能解决你的问题,请参考以下文章

vim查找命令

vim  模式查找

Liunx常用操作-如何忽略大小写查找

C# RegEx:忽略大小写...在模式中?

grepsedawk基础

jquery easyui combobox怎么设置忽略大小写搜索