【发布时间】:2011-01-18 05:59:12
【问题描述】:
我想在文件中搜索大写单词,例如 COPYRIGHT。我尝试执行如下搜索:
/copyright/i # Doesn't work
但它不起作用。我知道在 Perl 中,如果我将 i 标志放入正则表达式,它会将正则表达式转换为不区分大小写的正则表达式。似乎 Vim 有自己的方式来指示不区分大小写的正则表达式。
【问题讨论】:
标签: search vim case-insensitive
我想在文件中搜索大写单词,例如 COPYRIGHT。我尝试执行如下搜索:
/copyright/i # Doesn't work
但它不起作用。我知道在 Perl 中,如果我将 i 标志放入正则表达式,它会将正则表达式转换为不区分大小写的正则表达式。似乎 Vim 有自己的方式来指示不区分大小写的正则表达式。
【问题讨论】:
标签: search vim case-insensitive
您可以在模式中的任何位置使用\c 转义序列。例如:
/\ccopyright 或/copyright\c 甚至/copyri\cght
要进行反向(区分大小写匹配),请改用\C(大写C)。
【讨论】:
\c 可以出现在模式中的任何位置,因此如果您键入模式然后决定要进行不区分大小写的搜索,只需在末尾添加 \c。
set ignorecase 以进行不区分大小写的搜索,并且我可以使用\C 进行类似于@AlokSinghal 提到的区分大小写的搜索。
set smartcase,如果您使用任何大写字母,它会自动切换到区分大小写的搜索。
set smartcase 仅在 set ignorecase 已处于活动状态时适用。我被这件事难住了一段时间。见Vim Tips。
\c 与 \C
除了\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'
【讨论】:
ignorecase 的问题在于它会影响替换和搜索。我发现默认情况下进行(智能)不区分大小写的搜索但区分大小写的替换是有意义的。但据我所知,没有办法做到这一点。
smartcase 工作,您还需要set ignorecase。很好的提示,谢谢!
:%s/lowercasesearch\C/replaceString/g。这不会创建您想要的默认功能,但它确实允许您强制区分大小写以进行替换,同时在搜索时仍然受益于 smartcase。
I flag 以强制模式区分大小写。喜欢:%s/lowercasesearch/replaceString/gI。
After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
你可以在搜索前在 Vim 中设置ic 选项:
:set ic
要返回区分大小写的搜索,请使用:
:set noic
ic 是ignorecase 的简写
【讨论】:
\c 在 vi 中不起作用。
你可以发出命令
:set ignorecase
之后您的搜索将不区分大小写。
【讨论】:
为了在区分大小写和不区分大小写的搜索之间切换,我在我的 .vimrc 中使用了这个映射
nmap <F9> :set ignorecase! ignorecase?
【讨论】:
ignorecase? 会显示标志的当前状态。 (在命令行中)
您可以在vimrc 中使用这些命令:
set ignorecase - 您的所有搜索都将不区分大小写set smartcase - 如果包含大写字母,您的搜索将区分大小写如果您想使用smartcase 提供的功能,您需要设置ignorecase。
我最近写了an article about Vim search commands(内置命令和高效搜索的最佳插件)。
【讨论】:
set smartcase 似乎不会执行不区分大小写的搜索...这正常吗?
正如其他人建议的那样:
:set ic
但很酷的东西是您可以通过以下方式切换此类模式:
:set ic!
【讨论】:
把这个命令放在你的 vimrc 文件中
set ic
始终进行不区分大小写的搜索
【讨论】:
set noic。
我更喜欢在搜索字符串的末尾使用\c:
/copyright\c
【讨论】:
默认情况下,vi 中的所有搜索都区分大小写。要进行不区分大小写的搜索,请进入命令模式(按 Escape),然后输入 -:set ignorecase
您也可以输入 -
:set ic 的缩写。
要改回区分大小写的模式,请在命令模式下键入-:set noignorecase 或 :set noic
【讨论】:
:set ic! 将切换
正如@huyz 提到的,有时期望的行为是使用不区分大小写的搜索但区分大小写的替换。我的解决方案:
nnoremap / /\c
nnoremap ? ?\c
当您点击/ 或? 时,它会添加\c 以进行不区分大小写的搜索。
【讨论】:
smartcase 选项吗?
smartcase
Vim 有两种模式
1.编辑模式
搜索将在正常模式下工作
/\c 区分大小写
/\c搜索
【讨论】:
你可以默认设置ignorecase,在shell中运行这个
echo "set ic" >> ~/.vimrc
【讨论】:
您可以在模式中的任何位置使用 \c 转义序列
无论从接受的答案来看,这表明在正则表达式模式中放置修饰符的位置没有区别,它看起来确实很重要。
示例文本:
asdasdasdasdasd wiktor asdasdasdasd
adasdasdasd wiktor asdasda ahjkjlkhjkl
asdasd asd asdasdasdasd iuuuu -
asdjkkkkkkkaopbsdasda
wiktor ----(---------------------)--
\c^.*A?.*$^\c.*A?.*$^.*\cA?.*$^.*A\c?.*$
^.\c*A?.*$^.*A?\c.*$^.*A?.\c*$^.*A?.*$\c
vim -version VIM - Vi IMproved 8.2(2019 年 12 月 12 日,编译 2020 年 6 月 1 日 06:42:35)
包含的补丁:1-869【讨论】: