vim ctags:如果我的lua函数名后面有一个空格,则找不到标签

问题描述 投票:0回答:1

我已经注释掉了我所有的 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询问过,但它无法解决这个问题。

vim lua tags macvim
1个回答
0
投票

解析文件时,

ctags
创建了一个
test 
标签,注意尾随空格,而不是
test
标签。这可能是因为 Lua 的默认解析器不希望函数名称和左括号之间有可选的空格。

由于实际标签是

test 
,因此使用
test
-t test
搜索
:tag test
将不起作用。你必须……

  • 在 Vim 中搜索
    test 
    :
    :tag test 
    ,
  • 或搜索正则表达式
    test
    tag /test

Vim 内部,或者:

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

如果您无法从代码中删除多余的空格(这将是真正的解决方案),在这里,您可以告诉 ctags 使用一些正则表达式搜索新标签(请参阅

$ man ctags
)或尝试Universal Ctags,正如评论中提到的,在这个特定场景中,它可能比 Exuberant Ctags 更聪明。

© www.soinside.com 2019 - 2024. All rights reserved.