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

das*_*ang 6 vim ctags

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

但是,我在我的工作场所使用DSL,它使用不区分大小写的标识符.我产生这种DSL的标签,我甚至可以用foldcase对它进行排序(并设置在标记文件中的相应标志),但是,Vim依然显得做标识符区分大小写的匹配.

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

我想我可以打开ignorecase了该文件类型(我切换出标签文件反正更改一些其他设置),但随后的Vim我咆哮时的情况不符.我只是喜欢的方式来告诉Vim的,"嘿,这是不区分大小写所以没关系,你不需要我大声喊叫了." 一般看来需要我,Vim不能仅仅解释从标签文件的排序方式的意图,但也许这不是一个广泛持有的愿望......

das*_*ang 3

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

autocmd BufEnter  *                 setlocal noignorecase
autocmd BufEnter  *.{dsl-a,dsl-b*}  setlocal ignorecase
Run Code Online (Sandbox Code Playgroud)

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

!_TAG_FILE_SORTED   2   /0=unsorted, 1=sorted, 2=foldcase/
Run Code Online (Sandbox Code Playgroud)

唉,看来事实并非如此。


前几天我遇到了一个问题,它为大众提供了进一步的文档;找不到我要搜索的一些标签,但当我查看标签文件时,它们就在那里。然后我注意到被跳过的项目上方有一些行具有相同的前导字符,但有一个下划线;我意识到下划线在字母之前排序,并想知道这是否可能是一个问题(下划线是大写 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()
Run Code Online (Sandbox Code Playgroud)