Vim ctags:如果lua函数名后有一个空格,则找不到标记

vcudknz3  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(166)

我已经注解掉了我所有的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,但它不能解决这个问题。

m1m5dgzv

m1m5dgzv1#

在解析文件时,ctags创建了一个test标记,* 请注意结尾的空格 *,而不是test标记。这可能是因为Lua的默认解析器不希望在函数名和左括号之间有可选的空格。
由于实际的标记是test,因此使用-t test:tag test搜索test将不起作用,因为该搜索是 literal

  • 在Vim::tag test中搜索test,并使用空格,
  • 或搜索正则表达式test:tag /test

在Vim中,或:

  • 在shell中搜索正则表达式test$ vim -t /test

请参见:help tag-regexp
如果您不能从代码中删除多余的空间(这是真实的的解决方案),您可以告诉ctags使用一些regexp搜索新标记(参见$ man ctags),或者尝试Universal Ctags(如注解中所述),在此特定场景中,它可能比Exuberant Ctags更智能,也可能不智能。

相关问题