【问题标题】:How to do case insensitive search in Vim如何在 Vim 中进行不区分大小写的搜索
【发布时间】:2011-01-18 05:59:12
【问题描述】:

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

/copyright/i    # Doesn't work

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

【问题讨论】:

    标签: search vim case-insensitive


    【解决方案1】:

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

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

    要进行反向(区分大小写匹配),请改用\C(大写C)。

    【讨论】:

    • 另外,\c 可以出现在模式中的任何位置,因此如果您键入模式然后决定要进行不区分大小写的搜索,只需在末尾添加 \c
    • 我喜欢在我的 vimrc 中添加set ignorecase 以进行不区分大小写的搜索,并且我可以使用\C 进行类似于@AlokSinghal 提到的区分大小写的搜索。
    • 还有set smartcase,如果您使用任何大写字母,它会自动切换到区分大小写的搜索。
    • 只想添加到 Zaz 的评论中。 set smartcase 仅在 set ignorecase 已处于活动状态时适用。我被这件事难住了一段时间。见Vim Tips
    • @coderMe,这是大写,\c\C
    【解决方案2】:

    除了\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'
    

    【讨论】:

    • ignorecase 的问题在于它会影响替换和搜索。我发现默认情况下进行(智能)不区分大小写的搜索但区分大小写的替换是有意义的。但据我所知,没有办法做到这一点。
    • 值得注意的是,要使smartcase 工作,您还需要set ignorecase。很好的提示,谢谢!
    • 我相信您可以在搜索表达式中使用 \C 进行替换,如下所示::%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>.
    【解决方案3】:

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

    :set ic
    

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

    :set noic
    

    icignorecase 的简写

    【讨论】:

    • 如果你不幸仍然使用 Vi 而不是 Vim,这也是你唯一的选择。 \c 在 vi​​ 中不起作用。
    【解决方案4】:

    你可以发出命令

    :set ignorecase
    

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

    【讨论】:

      【解决方案5】:

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

      nmap <F9> :set ignorecase! ignorecase?

      【讨论】:

      • 是的,但是ignorecase? 会显示标志的当前状态。 (在命令行中)
      • 谢谢!对我来说,这是页面上最有用的答案:一种根据您当时正在搜索的内容在两种模式之间快速切换的方法。
      【解决方案6】:

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

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

      如果您想使用smartcase 提供的功能,您需要设置ignorecase

      我最近写了an article about Vim search commands(内置命令和高效搜索的最佳插件)。

      【讨论】:

      • 如果我不使用大写字母,set smartcase 似乎不会执行不区分大小写的搜索...这正常吗?
      • 好的,请阅读下面的内容,您必须同时设置 ignorecase 和 smartcase 才能使其工作。很抱歉!
      【解决方案7】:

      正如其他人建议的那样:

      :set ic
      

      但很酷的东西是您可以通过以下方式切换此类模式:

      :set ic!
      

      【讨论】:

        【解决方案8】:

        好老的vim[grep] 命令..

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

        【讨论】:

        • Cannot open file "&"
        • 我猜他的意思是%而不是%
        【解决方案9】:

        把这个命令放在你的 vimrc 文件中

        set ic 
        

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

        【讨论】:

        • 我不知道为什么,但我的 vim 默认设置为不区分大小写,以解决这个问题。使用set noic
        【解决方案10】:

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

        /copyright\c
        

        【讨论】:

          【解决方案11】:

          默认情况下,vi 中的所有搜索都区分大小写。要进行不区分大小写的搜索,请进入命令模式(按 Escape),然后输入 -
          :set ignorecase
          您也可以输入 - :set ic 的缩写。

          要改回区分大小写的模式,请在命令模式下键入-
          :set noignorecase:set noic

          【讨论】:

          • :set ic! 将切换
          【解决方案12】:

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

          nnoremap / /\c
          nnoremap ? ?\c
          

          当您点击/? 时,它会添加\c 以进行不区分大小写的搜索。

          【讨论】:

          • 不错的建议,但它会阻止您使用smartcase 选项吗?
          • 看起来会因为 \c 覆盖 smartcase
          【解决方案13】:

          Vim 有两种模式

          1.编辑模式

          1. 普通模式(Esc)

          搜索将在正常模式下工作

          /\c 区分大小写

          /\c搜索

          【讨论】:

          • 视觉模式呢?
          【解决方案14】:

          你可以默认设置ignorecase,在shell中运行这个

          echo "set ic" >> ~/.vimrc
          

          【讨论】:

            【解决方案15】:

            请注意,在表达式中放置“\c”等修饰符是不同的:

            您可以在模式中的任何位置使用 \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

            【讨论】:

              【解决方案16】:

              一些重要信息,如果你想了解更多关于vim的命令,如下所述,你可以尝试以下步骤:

              • 调用命令“帮助”后跟一个空格,然后用 TAB 键完成单词,一旦你找到正确的命令按返回键。
              :help ignorecase
              
              • 将显示如下信息:

              • 您将能够向前和向后移动并观看短命令,例如“ignorecase” ( 'ic' ) 的情况。此外,另一个简短的例子可能是“smartcase”(“scs”等等):

              • 要离开文档,只需像往常一样输入“:q”,您将返回“命令模式”。
              :q
              

              我真的希望所提供的信息对某人有所帮助。

              最好的问候,

              【讨论】:

                猜你喜欢
                • 2013-02-24
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-04-17
                • 2021-02-18
                • 1970-01-01
                相关资源
                最近更新 更多