How to do case insensitive search in Vim
我想搜索一个大写词,例如文件中的版权。我尝试了如下搜索:
1
| /copyright/i # Doesn't work |
但它不起作用。我知道在Perl中,如果将i标志赋给regex,它将把regex变成不区分大小写的regex。似乎vim有自己的方式来表示不区分大小写的regex。
您需要使用\c转义序列。所以:
/\ccopyright
要进行反向(区分大小写匹配),请使用\c。
- 另外,\c可以出现在模式中的任何地方,因此,如果您键入一个模式,然后决定要进行不区分大小写的搜索,只需在末尾添加一个\c。
- 我喜欢在vimrc中添加set ignorecase进行不区分大小写的搜索,我可以使用\c进行类似于@aloksinghal所提到的区分大小写的搜索。
- 还有set smartcase,如果你使用大写字母,它会自动切换到区分大小写的搜索。
- 只是想加上扎兹的评论。只有当set ignorecase已经激活时,set smartcase才适用。我在这件事上被难住了一会儿。见vim提示。
- Whut?答案是:"使用\c"。对于反转,使用\c。"我认为"for the inverse"答案应该说明搜索/copyright在默认情况下是区分大小写的。
- @coderme,是大写的,\c对\c
- Zaz和Vimtips中的评论应该包含在这个答案中。或者应该参考Matthieu的另一个答案,因为没有它没有意义。
除了对\c和ignorecase的建议外,我发现smartcase非常有用。如果搜索包含大写字符的内容,它将执行区分大小写的搜索;如果搜索纯小写的内容,它将执行不区分大小写的搜索。您可以使用\c和\c来覆盖:
1 2 3 4 5 6
| :set ignorecase
:set smartcase
/copyright " Case insensitive
/Copyright " Case sensitive
/copyright\C " Case sensitive
/Copyright\c " Case insensitive |
见:
1 2 3
| :help /\c
:help /\C
:help 'smartcase' |
- ignorecase的问题在于它影响替换和搜索。我发现使用(智能)不区分大小写的搜索是有意义的,但默认情况下使用区分大小写的替换。但我不知道怎么做。
- 值得注意的是,要使smartcase工作,您还需要set ignorecase。不过,小费太好了,谢谢!
- 我相信您可以在搜索表达式中使用a c进行替换,如::%s/lowercasesearch\C/replaceString/g。这不会创建您想要的默认功能,但它允许您强制进行替换,同时在搜索时仍然受益于SmartCase。
- 您还可以在替换上设置I标志,以强制模式区分大小写。像:%s/lowercasesearch/replaceString/gI一样。
- 帮助页面中的注释(如果您像我一样对"*"上瘾,则很有用):After "*" and"#" you can make 'smartcase' used by doing a"/" command, recalling the search pattern from history and hitting . 。
- 我认为应该在答案中添加@skilldrick的评论
在搜索之前,您可以在VIM中设置ic选项:
要返回区分大小写的搜索,请使用:
ic是ignorecase的简写。
你可以发出命令
之后你的搜索将不区分大小写。
要在区分大小写和不敏感搜索之间切换,我在.vimrc中使用此映射
nmap :set ignorecase! ignorecase?
- 只是:set ignorecase!应该工作得很好。
- 是的,但是ignorecase?显示了国旗的当前状态。(在命令行中)
把这个命令放到VIMRC文件中
总是进行不区分大小写的搜索
- 我不知道为什么,但是我的vim默认设置为不区分大小写,以应对这个问题。使用set noic。
正如其他人所建议的:
但最酷的是,你可以通过以下方式切换这些模式:
您可以在您的vimrc中使用这些命令:
- set ignorecase—所有搜索都不区分大小写
- set smartcase—如果您的搜索包含大写字母,那么它将区分大小写。
如果要使用smartcase提供的功能,则需要设置ignorecase。
我最近写了一篇关于vim搜索命令的文章(既有内置命令,也有高效搜索的最佳插件)。
- 如果我不使用大写字母,set smartcase似乎不会执行不区分大小写的搜索…这是正常的吗?
- 好的,请阅读下面的内容,您必须同时设置ignorecase和smartcase才能使其正常工作。对不起!
- 我建议在答案中说明这一点。
老江户一〔17〕指挥部。
我喜欢在搜索字符串的末尾使用\c:
正如@huyz所提到的,有时所需的行为是使用不区分大小写的搜索,但使用区分大小写的替换。我的解决方案是:
1 2
| nnoremap / /\c
nnoremap ? ?\c |
当你点击/或?时,它会加上\c,用于不区分大小写的搜索。
- 这不是一个坏建议,但它是否阻止您使用smartcase选项?
- 似乎是因为c重写了smartcase。
默认情况下,可以设置ignorecase,在shell中运行。
VIM有两种模式
1.编辑模式
正常模式(Esc)
搜索将在正常模式下工作
/ C表示区分大小写
搜索