题 如何在Vim中进行不区分大小写的搜索


我想搜索大写单词,例如文件中的COPYRIGHT。我尝试过执行搜索:

/copyright/i    # Doesn't work

但它不起作用。我知道在Perl,如果我给的话 i 标记为正则表达式它将正则表达式转换为不区分大小写的正则表达式。似乎Vim有自己的方式来表示不区分大小写的正则表达式。


1339
2018-02-18 09:17


起源




答案:


你需要使用 \c 逃脱序列。所以:

/\ccopyright

做反过来(案例 敏感 匹配),使用 \C 代替。


1679
2018-02-18 09:18



也, \c 可以出现在模式中的任何位置,因此如果您键入模式然后决定要进行不区分大小写的搜索,只需添加一个 \c 最后。 - Alok Singhal
我想补充一下 set ignorecase 在我的vimrc中进行不区分大小写的搜索,我可以使用 \C 做一个类似于@AlokSinghal提到的区分大小写的搜索。 - Nick McCurdy
还有 set smartcase 如果您使用任何大写字母,它将自动切换到区分大小写的搜索。 - Zaz
只想添加Zaz的评论。 set smartcase 仅适用于 set ignorecase 已经活跃了。我被困在这一段时间了。看到 Vim小贴士。 - Tan Wang
@coderMe,这是大写, \c 与 \C - Aaron McDaid


以及建议 \c 和 ignorecase,我找到了 smartcase 很有用。如果搜索包含大写字符的内容,它将执行区分大小写的搜索;如果你搜索纯粹小写的东西,它会做一个不区分大小写的搜索。您可以使用 \c 和 \C 覆盖这个:

:set ignorecase
:set smartcase
/copyright      " Case insensitive
/Copyright      " Case sensitive
/copyright\C    " Case sensitive
/Copyright\c    " Case insensitive

看到:

:help /\c
:help /\C
:help 'smartcase'

568
2018-02-18 12:11



这个问题 ignorecase 是它影响替换和搜索。我发现默认情况下(智能)不区分大小写的搜索是有意义的,但是区分大小写的替换。但我知道没有办法做到这一点。 - huyz
值得注意的是 smartcase 工作,你也需要 set ignorecase。不过很棒,谢谢! - Skilldrick
我相信您可以在搜索表达式中使用\ C进行替换,如下所示: :%s/lowercasesearch\C/replaceString/g。这不会创建您想要的默认功能,但它确实允许您在替换时强制区分大小写,同时在搜索时仍然可以从智能手机中获益。 - Anthony DiSanti
你也可以设置 I 旗 在替换上强制模式区分大小写。喜欢 :%s/lowercasesearch/replaceString/gI。 - Rory O'Kane
从帮助页面注意(如果你像我一样沉迷于“*”): After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>. - mcella


你可以设置 ic 搜索前Vim中的选项:

:set ic

要返回区分大小写的搜索,请使用:

:set noic

ic 是简写 ignorecase


238
2018-02-18 09:18





您可以发出命令

:set ignorecase

之后,您的搜索将不区分大小写。


49
2018-02-18 09:19





要在区分大小写和不区分大小写的搜索之间切换,我在.vimrc中使用此映射

nmap <F9> :set ignorecase! ignorecase?


41
2018-02-23 11:51



只是 :set ignorecase! 应该工作正常。 - Chris Down
对,但是 ignorecase? 显示标志的当前状态。 (在命令行中) - Boris Brodski


将此命令放在vimrc文件中

set ic 

总是做不区分大小写的搜索


15
2018-05-19 10:31



我不知道为什么,但我的vim默认设置为不区分大小写,以解决这个问题。使用 set noic。 - user1510539


好老 vim[grep] 命令..

:vimgrep /example\c/ &
  • \C 不区分大小写
  • \C 区分大小写
  •  是在当前缓冲区中搜索

enter image description here


10
2017-11-18 01:18



Cannot open file "&" - Vitaly Zdanevich


正如其他人所说:

:set ic

但很酷的东西你可以切换这样的模式:

:set ic!

8
2018-01-19 09:34





正如@huyz提到的,有时候期望的行为是使用不区分大小写的搜索,但是区分大小写的替换。我的解决方案:

nnoremap / /\c
nnoremap ? ?\c

总是当你击中时 / 要么 ? 它会添加 \c 用于不区分大小写的搜索。


6
2018-02-12 09:58



这不是一个糟糕的建议,但它会阻止你使用 smartcase 选项? - Trebor Rude
看起来它会因为\ c覆盖 smartcase - Matthew Woo


我更喜欢使用 \c 在搜索字符串的末尾:

/copyright\c

5
2018-06-15 01:54





你可以在你的 vimrc 那些命令:

  • set ignorecase  - 您的所有搜索都不区分大小写
  • set smartcase  - 如果包含大写字母,则搜索将区分大小写

我最近写的 一篇关于Vim搜索命令的文章 (内置命令和最有效的搜索插件)。


4
2017-12-26 08:36



看起来 set smartcase 如果我不使用大写字母,则不执行不区分大小写的搜索...这是正常的吗? - caneta
好的,请阅读下面的内容,您必须同时设置ignorecase和smartcase才能使其正常工作。对于那个很抱歉! - caneta
我建议在答案本身澄清这一点。 - Yoni Zohar