如何让标签栏使用js文件

How to get tagbar to work with js files

本文关键字:js 文件 标签栏      更新时间:2023-09-26

如果我打开一个扩展名为.html的文件,tagbar就可以正常工作。

如果我打开一个扩展名为.js的文件,那么标签栏不会列出任何内容。只要将文件扩展名重命名为.html就可以了。

如何让标签栏与.js文件一起使用?

您尝试过taglist plus吗?它使用jsctags,在我安装这个插件的短暂时间里,它运行得很好。

  • 您正在处理的文件的文件类型(:set ft?)是什么?

  • 您是否已安装和工作ctags和/或jsctags

    从放置JavaScript文件的位置执行的$ ctags -R .和/或$ jsctags .是否会创建tags文件?

    如果是,它包含什么?

  • 如果您使用的是jsctags,它是最新的吗?nodejs呢?

在编辑Tasmota代码时,在*.ino文件中使用vimtagbarArduino源代码时遇到此问题。

我必须意识到两件事:

  1. 使ctags处理新的文件扩展名(请参阅https://stackoverflow.com/a/67495267/10050838):对于ctags-universal,创建一个包含--langmap=c++:+.ino的文件~/.ctags.d/local.ctags
  2. 让标签栏知道如何在.vimrc中处理vim文件类型arduino(使用:set filetype?查询vim中的文件类型):
let g:tagbar_type_arduino = {
    ' 'ctagstype' : 'c++',
    ' 'kinds'     : [
        ' 'd:macros:1:0',
        ' 'p:prototypes:1:0',
        ' 'g:enums',
        ' 'e:enumerators:0:0',
        ' 't:typedefs:0:0',
        ' 'n:namespaces',
        ' 'c:classes',
        ' 's:structs',
        ' 'u:unions',
        ' 'f:functions',
        ' 'm:members:0:0',
        ' 'v:variables:0:0'
    ' ],
    ' 'sro'        : '::',
    ' 'kind2scope' : {
        ' 'g' : 'enum',
        ' 'n' : 'namespace',
        ' 'c' : 'class',
        ' 's' : 'struct',
        ' 'u' : 'union'
    ' },
    ' 'scope2kind' : {
        ' 'enum'      : 'g',
        ' 'namespace' : 'n',
        ' 'class'     : 'c',
        ' 'struct'    : 's',
        ' 'union'     : 'u'
    ' }
' }

:help tagbar -> tagbar-extend中查找操作方法和此定义。~/.vim/bundle/tagbar/autoload/tagbar/types/uctags.vim 中给出了Javascript和其他定义

可能还有其他方法可以做到这一点。它适用于我(tm)。

剩下的唯一一件事是:重新打开*.ino源文件,点击<F8>显示您的标签栏。

HTH