【问题标题】:Case insensitive tag searching in VimVim 中不区分大小写的标签搜索
【发布时间】:2013-06-26 01:42:14
【问题描述】:

在大多数情况下,我发现区分大小写的标签搜索是合适的。我们使用的大多数语言都区分大小写,因此这是可取的。

但是,我的工作场所有一个 DSL,它使用不区分大小写的标识符。我为这个 DSL 生成标签,我什至可以用 foldcase 对其进行排序(并在标签文件中设置适当的标志),但 Vim 似乎仍然对标识符进行区分大小写的匹配。

我希望 Vim 能够将“折叠大小写”标记文件理解为“这种语言不区分大小写”。有这样的设置吗?

我想我可以为这种文件类型打开ignorecase(我切换了标签文件并更改了一些其他设置),但是当大小写不匹配时,Vim 对我咆哮。我只是喜欢用一种方式对 Vim 说,“嘿,这不区分大小写,所以没关系,你不需要对我大喊大叫。”一般来说,我认为 Vim 可以从标签文件的排序方式中解释意图,但也许这不是一个广泛持有的愿望......

【问题讨论】:

    标签: vim ctags


    【解决方案1】:

    最终我只是做了ignorecase 解决方案。我的 vimrc 中有这些:

    autocmd BufEnter  *                 setlocal noignorecase
    autocmd BufEnter  *.{dsl-a,dsl-b*}  setlocal ignorecase
    

    烦人但问题解决了;我希望 Vim 会注意到标记文件中的标题:

    !_TAG_FILE_SORTED   2   /0=unsorted, 1=sorted, 2=foldcase/
    

    可惜好像没有。


    前几天我遇到了一个问题,该问题为大众提供了进一步的文档;没有找到我要搜索的一些标签,但是当我查看标签文件时,它们就在那里。然后我注意到在被跳过的项目上方有一些行具有相同的前导字符,但随后是一个下划线;我意识到下划线在字母之前排序,并想知道这是否是一个问题(下划线是出现在大写 Z 和小写 A 之间的六个字符之一,但唯一一个在 C 兼容标识符中有效)。

    为了咯咯笑,我手动重新处理了有问题的部分,以便在字母之后出现下划线。我什至编写了一个最小的测试用例并为 bugs@vim 写了一个大的错误报告,然后决定查看有关标签的文档以“引用适当的参考”。它被埋在:help tagbsearch 的末尾,即对我们这些慢性病患者几乎没有用处。

    请注意,大小写必须折叠为大写才能使用。

    对我的 Python 脚本的一行更改修复了我的标记文件:

    if casefold:
        tags.sort(key=str.upper)  # tag file requires case folding to be folded to upper case
    else:
        tags.sort()
    

    【讨论】:

      【解决方案2】:

      我对 vim 比较陌生,但我将它添加到我的 .vimrc 中,到目前为止它似乎对我很有效。

      "Tag jumping
      
      function! TagInsensitiveJump()
        execute ":tj /\\c" . expand("<cword>") 
      endfunction
      
      nnoremap <C-]> :call TagInsensitiveJump()<CR>
      

      【讨论】:

      • 您也可以在您的.vimrc 中添加:set ignorecase 来实现同样的目的。
      【解决方案3】:

      这不是一个合适的答案,但希望它会成为一个!

      您会提供更多详细信息吗?比如,一个小的工作示例?

      这是我的尝试,但我不确定它是否能说明您在说什么。我也会把它放在gist 中,以防你想合作,也许我们可以一起找到答案。

      标签:

      blah    a.txt   1
      

      a.txt:

      bLah
      

      Gist of same.

      重现步骤:

      1. 运行 vim
      2. :set ignorecase
      3. :tag blah
      4. get message: "tag 1 of 1 or more Using tag with different case!"

      另外,看起来像 someone asked this question recently on the Vim user mailing list,但我没有看到任何回复。

      【讨论】:

      • 是的,尽管我的tags 文件与它标记的源文件具有相同的大小写,但这与我找到的解决方案一样接近。 IE。 tags 有一个大写 L,但我仍然使用 :tag blah 并收到“使用不同大小写的标签”消息。这很烦人。 :)
      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2013-09-26
      • 2023-03-20
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多