我正在尝试将 .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 文件。我在这里做错了什么?
答案 0 :(得分:2)
出现意外行为的原因很可能是:
.ctags
文件在文件末尾有--langmap=html:+.volt
,没有行终止。请阅读下面的完整故事,了解为什么我认为这两个原因导致您计算机上出现 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日星期一)的更改备注栏中找到了
这是对我的想法和可以看到的确认。当然,问题不仅存在于读取列表文件,而且还存在读取其他文本文件(如选项文件)或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。