在Vim中搜索不区分大小写的标签

时间:2011-08-29 18:15:58

标签: vim ctags

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

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

我喜欢的是,如果Vim能够将“折叠案例”标记文件理解为“此语言不区分大小写”。有这样的设置吗?

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

3 个答案:

答案 0 :(得分:2)

最终我只是做了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兼容标识符中有效的字符)。 p>

对于咯咯笑声,我手动使用违规部分,以便在字母后面出现下划线。我甚至编写了一个最小的测试用例并编写了一个关于bug @ 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()

答案 1 :(得分:2)

我对vim相对较新,但我将其添加到我的.vimrc中,到目前为止似乎对我有用。

"Tag jumping

function! TagInsensitiveJump()
  execute ":tj /\\c" . expand("<cword>") 
endfunction

nnoremap <C-]> :call TagInsensitiveJump()<CR>

答案 2 :(得分:1)

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

您会提供更多详情吗?比如,一个小工作的例子?

这是我的尝试,但我不确定它是否说明了你在说什么。如果你想要合作,我也会把它保留在gist中,然后我们可以一起找到答案。

标记:

blah    a.txt   1

A.TXT:

bLah

Gist of same

重现的步骤:

  1. run vim
  2. 执行:set ignorecase
  3. 执行:tag blah
  4. 获取消息:“标记1中的1个或更多使用不同大小写的标记!”
  5. 此外,看起来像someone asked this question recently on the Vim user mailing list,但我没有看到任何回复。