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


1649

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

/copyright/i    # Doesn't work

但这不起作用。我知道在Perl中,如果我将i标志放入正则表达式中,它将把正则表达式变成不区分大小写的正则表达式。Vim似乎有其自己的方式来表示不区分大小写的正则表达式。

Answers:


2106

您可以\c在模式中的任何位置使用转义序列。例如:

/\ccopyright或者/copyright\c甚至/copyri\cght

要进行逆运算(区分大小写的匹配),请改用\C(大写字母C)。


516
另外,它\c可以出现在模式中的任何位置,因此,如果您键入一个模式然后决定要进行不区分大小写的搜索,则只需\c在末尾添加一个即可。
Alok Singhal'2

268
我喜欢set ignorecase在vimrc中添加不区分大小写的搜索,并且可以使用\C类似于@AlokSinghal提到的区分大小写的搜索。
Nick McCurdy 2013年

163
set smartcase如果您使用大写字母,还可以自动切换到区分大小写的搜索。
Zaz

82
只是想添加Zaz的评论。set smartcase仅在set ignorecase已经处于活动状态时适用。我为此感到困惑了一段时间。请参阅Vim技巧
Tan

12
@coderMe,是大写,\c\C
Aaron McDaid

680

以及您的建议\cignorecase,我觉得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'

83
问题ignorecase在于它影响替换和搜索。我发现进行(智能)不区分大小写的搜索是有意义的,但是默认情况下进行区分大小写的替换。但是我无法做到这一点。
huyz 2011年

150
值得注意的是,smartcase要工作,您还需要set ignorecase。很好的提示,谢谢!
Skilldrick 2012年

12
我相信您可以在搜索表达式中使用\ C进行替换,例如::%s/lowercasesearch\C/replaceString/g。这不会创建您想要的默认功能,但确实允许您强制区分大小写以进行替换,同时仍然在搜索时受益于smartcase。
安东尼·迪桑蒂

23
您还可以在替代项上设置该I标志,以强制该模式区分大小写。像:%s/lowercasesearch/replaceString/gI
罗里·奥肯

1
来自帮助页面的注释(如果您像我一样沉迷“ *”很有用):After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella 2014年

290

您可以ic在搜索前在Vim中设置选项:

:set ic

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

:set noic

ic 是的简写 ignorecase


如果您不幸仍然无法使用Vi代替Vim,这也是您唯一的选择。\c在vi中不起作用。
bluppfisk


50

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

nmap <F9> :set ignorecase! ignorecase?


15
是的,但是ignorecase?向您显示该标志的当前状态。(在命令行中)
Boris Brodski '16

1
谢谢!对我来说,这是页面上最有用的答案:一种方法,可以根据您当时的搜索条件在两种模式之间快速切换。
本·希利尔

30

您可以在vimrc这些命令中使用:

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

ignorecase如果要使用smartcase提供的内容,则需要进行设置。

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


1
set smartcase如果我不使用大写字母,似乎不会执行不区分大小写的搜索...这正常吗?
caneta

1
好的,请阅读下面的内容,您必须同时设置ignorecase和smartcase才能起作用。对于那个很抱歉!
caneta

24

正如其他人建议的那样:

:set ic

但是很酷的事情是您可以使用以下命令切换这些模式:

:set ic!

18

将此命令放在vimrc文件中

set ic 

始终执行不区分大小写的搜索


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

18

好的旧vim[grep]命令。

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

在此处输入图片说明


Cannot open file "&"
Vitaly Zdanevich

我猜他%不是他们的意思%
oarfish

15

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

/copyright\c

10

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

nnoremap / /\c
nnoremap ? ?\c

总是这样,当您点击/或时?,它将添加\c为不区分大小写的搜索。


1
不错的建议,但是它会阻止您使用该smartcase选项吗?
Trebor Rude

自\ c覆盖后,它看起来像smartcase
Matthew Woo

4

Vim有2种模式

1.编辑模式

  1. 普通模式(Esc)

搜索将适用于普通模式

/ \ c区分大小写

/ \ c 搜索


视觉模式呢?
user202729

3

您可以ignorecase默认设置,在shell中运行

echo "set ic" >> ~/.vimrc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.