向ctags添加新语言不起作用

时间:2014-06-13 07:52:50

标签: ctags exuberant-ctags

我正在尝试将 .volt 扩展名添加到ctags语言映射中,但它一直忽略 .volt 文件。这是我的 .ctags 文件的内容:

--recurse=yes
--tag-relative=yes
--exclude=*.git*
--exclude=.DS_Store

--langmap=html:+.volt

当我 ctags --list-maps 时,我会看到.volt文件包含在HTML中:

HTML     *.htm *.html *.volt

但是当我运行ctags时,它完全忽略了 .volt 文件。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

出现意外行为的原因很可能是:

  1. 您目前没有使用 Exuberant Ctags 的最新版本5.8,而是使用5.6之前的版本。
  2. 您的.ctags文件在文件末尾有--langmap=html:+.volt,没有行终止。
  3. 请阅读下面的完整故事,了解为什么我认为这两个原因导致您计算机上出现 Ctags 的意外行为。


    我首先使用安装了文本编辑器UltraEdit Exuberant Ctags 的旧版本5.5.4以及稍后直接从​​Exuberant Ctags下载的版本5.8查看了Windows上的问题项目页面。

    我创建了一个HTML项目的副本,其中只有1 * .html文件位于测试项目的父目录中,3 * .html文件位于子目录中,另外两个* .html文件也位于具有文件扩展名的子目录中在两个文件上从html更改为volt,这两个文件只是此子目录中3个.html文件中的2个的副本。

    接下来,我在项目的父目录中创建了一个ctags.conf文件,并将您发布的几行复制到此文件中。另外,我在--verbose的顶部插入一行,因为这对于查找类似的问题非常有用。

    最后我将ctags.exe(第一个v5.5.4,后来的v5.8)复制到测试项目目录中,只是为了更容易从命令行运行它。

    我在测试项目目录中打开了一个命令提示符窗口并执行了

    ctags.exe -f test.tag --options=ctags.conf
    

    我可以在详细输出中看到两个* .volt文件都已打开进行处理,创建的test.tag也包含2 * .volt文件中的所有标记,与2 * .html文件中的标记相同之前复制了* .volt文件。

    那可能是什么问题?

    我不仅熟悉HTML。我的主要工作是用C / C ++编程。因此,我知道在读取文本文件时C源代码文件经常出错:错误处理文件的最后一行没有行终止的文本文件。

    我知道像Linux上的gedit这样的文本编辑器将插入符号放在文件最后一行下面一行开头的Ctrl + End上,即使该文件的最后一行没有行终止。在这种情况下,插入符号应该由文本编辑器在最后一行的字符串末尾定位,而不是在文件的实际末尾之后的下一行开始。在我的观点中,错误的行为让文本编辑器的用户认为文本文件在文件的最后一行也有一个行终止,即使这不是真的。

    所以我认为你在文件末尾附加--langmap=html:+.volt而没有行终止,ctags.exe在这种情况下不评估行,因为源代码中的文本文件解析不好。因此,我从仅包含ctags.conf

    的最后一行删除了--langmap=html:+.volt中的行终止

    我执行了与以前相同的命令行和 AHA ,由于unknown language,* .volt文件都被忽略。

    这是我下载Windows版 Ctags 版本5.8并将其复制到测试项目目录中替换5.5.4版可执行文件的时间。

    我再次执行命令行而没有修改ctags.conf。两个* .volt文件都由 Ctags 处理,test.tag再次包含来自* .volt文件的标记。

    再次在文件ctags.conf的最后一行添加行终止并再次执行命令行不会导致不同的输出。因此,如果在 Ctags 的5.8版本中修复了文件末尾没有行终止,则忽略选项文件的最后一行会出现此错误。

    我在{{3>} Exuberant Ctags 搜索了last,并在 ctags-5.6(2006年5月29日星期一)的更改备注栏中找到了

    • 修复了在没有最终换行符的情况下读取列表文件(-L)最后一行的问题。

    这是对我的想法和可以看到的确认。当然,问题不仅存在于读取列表文件,而且还存在读取其他文本文件(如选项文件)或C和Java文件(如更改注释中的下一行)

    • 修复了无最终换行符[C,Java]的文件可能出现的无限循环。

答案 1 :(得分:1)

如果 ctags 二进制文件确实是 universal ctags,您需要在此处放置/链接您的配置文件 (man ctags-universal -> FILES):

~/.ctags.d/my-config.ctags

文件扩展名 .ctags 是相关的。

就我而言,我需要 ctags 来支持 arduino (.ino) 文件类型。将 --langmap=c++:+.ino 添加到 ~/.ctags.d/local.ctags(它实际上只是指向 ~/.ctags 的符号链接)。

检查:

ctags --list-maps | grep C++
C++      *.c++ *.cc *.cp *.cpp *.cxx *.h *.h++ *.hh *.hp *.hpp *.hxx *.inl *.C *.H *.CPP *.CXX *.ino
[...]

请注意列出已知扩展名的行末尾的 *.ino