我想在文件中搜索大写单词,例如 COPYRIGHT。我尝试执行如下搜索:
/copyright/i # Doesn't work
但它不起作用。我知道在 Perl 中,如果我将i
标志放入正则表达式,它会将正则表达式转换为不区分大小写的正则表达式。似乎 Vim 有自己的方式来表示不区分大小写的正则表达式。
我想在文件中搜索大写单词,例如 COPYRIGHT。我尝试执行如下搜索:
/copyright/i # Doesn't work
但它不起作用。我知道在 Perl 中,如果我将i
标志放入正则表达式,它会将正则表达式转换为不区分大小写的正则表达式。似乎 Vim 有自己的方式来表示不区分大小写的正则表达式。
您可以\c
在模式中的任何位置使用转义序列。例如:
/\ccopyright
或者/copyright\c
甚至/copyri\cght
要进行逆向(区分大小写的匹配),请改用\C
(大写 C)。
除了对\c
and的建议ignorecase
,我觉得smartcase
非常有用。如果您搜索包含大写字符的内容,它将执行区分大小写的搜索;如果您搜索纯小写的内容,它将执行不区分大小写的搜索。您可以使用\c
and\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'
你可以ic
在搜索前在 Vim 中设置选项:
:set ic
要返回区分大小写的搜索,请使用:
:set noic
ic
是简写ignorecase
你可以发出命令
:set ignorecase
之后您的搜索将不区分大小写。
要在区分大小写和不区分大小写的搜索之间切换,我在 .vimrc 中使用了这个映射
nmap <F9> :set ignorecase! ignorecase?
您可以在vimrc
这些命令中使用:
set ignorecase
- 您的所有搜索都将不区分大小写set smartcase
- 如果包含大写字母,您的搜索将区分大小写您需要设置ignorecase
是否要使用smartcase
提供的内容。
我最近写了一篇关于 Vim 搜索命令的文章(包括内置命令和高效搜索的最佳插件)。
正如其他人建议的那样:
:set ic
但很酷的东西是您可以使用以下方式切换此类模式:
:set ic!
把这个命令放在你的 vimrc 文件中
set ic
总是做不区分大小写的搜索
我更喜欢\c
在搜索字符串的末尾使用:
/copyright\c
默认情况下,vi 中的所有搜索都区分大小写。要进行不区分大小写的搜索,请进入命令模式(按 Escape),然后
:set ignorecase
键入 - 您也可以键入 -
:set ic
作为缩写。
要更改回区分大小写的模式,请 在命令模式下键入
:set noignorecase
或:set noic
正如@huyz 提到的,有时所需的行为是使用不区分大小写的搜索但区分大小写的替换。我的解决方案:
nnoremap / /\c
nnoremap ? ?\c
总是在您点击时使用它,/
否则?
它将添加\c
不区分大小写的搜索。
Vim 有 2 种模式
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