【问题标题】:Ignore the case in part of the search pattern in Vim在 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

但是,有什么方法可以忽略部分搜索模式中的大小写,而不必使用正则表达式指定每个大小写字符?

【问题讨论】:

  • 我想stackoverflow.com/q/2287440/2191572 有您正在寻找的答案,从我的快速概述来看,使用 Vim 似乎无法实现您的边缘案例请求。
  • 我不熟悉VIM,但是内联修饰符会按照this 工作吗?
  • 如果您使用\c 后跟\Cstackoverflow.com/a/2287449/2191572 会发生什么?它会像@JvdV 提到的内联修饰符那样起作用吗?
  • @sergio OP 明确提到他们希望避免写出所有小写字符及其大写变体。
  • 也许VIM 中有一种方法可以将第一个字符更改为UcaseLcase 内联。将此反馈给您的RegEx

标签: regex vim


【解决方案1】:

一般来说,这在 Vim 中是不可能的。不幸的是,/\c/\C 正则表达式修饰符将整个模式转换为区分大小写的匹配,无论它们放在哪里。 (在我看来,引入一组仅从该位置开始起作用的新修饰符将是最佳解决方案。)

大多数人通常通过对不敏感部分使用小写/大写 集合 来解决这个问题,/like [tT][hH][iI][sS]/

您也可以走相反的路线,而是将某些字符强制为大小写(使用/\l 表示小写,/\u 表示大写),/\c\%(\l\l\l\l\&like\) this/

【讨论】:

【解决方案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!/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2015-03-20
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多