我已经注释掉了我所有的 vimrc 文件,在我的 macOS (
22.6.0 Darwin Kernel Version 22.6.0: Wed Jul 5 22:22:05 PDT 2023; root:xnu-8796.141.3~6/RELEASE_ARM64_T6000 arm64 arm Darwin
) 中,它找不到带有以下命令和源代码的标签
$ cat x.lua
function test ()
end
$ ctags -R x.lua
$ cat tags
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR Darren Hiebert /[email protected]/
!_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.8 //
test x.lua /^function test ()$/;" f
$ vim -t test
# vim reports the error like "E257: cstag: Tag not found"
如果我删除了函数名称
test
后面的空格,例如function test()
,那么它就可以工作。
我还在我的 EC2 ubuntu 中测试了这个,即使函数名称后面有空格,它也可以工作
test
。
之后我不知道如何调试,我也向ChatGPT 3.5询问过,但它无法解决这个问题。
解析文件时,
ctags
创建了一个test
标签,注意尾随空格,而不是test
标签。这可能是因为 Lua 的默认解析器不希望函数名称和左括号之间有可选的空格。
由于实际标签是
test
,因此使用 test
或 -t test
搜索 :tag test
将不起作用。你必须……
test
: :tag test
,test
:tag /test
Vim 内部,或者:
test
:$ vim -t /test
。如果您无法从代码中删除多余的空格(这将是真正的解决方案),在这里,您可以告诉 ctags 使用一些正则表达式搜索新标签(请参阅
$ man ctags
)或尝试Universal Ctags,正如评论中提到的,在这个特定场景中,它可能比 Exuberant Ctags 更聪明。