在源文件上强制GitHub语法突出显示语言


16

我在GitHub存储库中有一些C ++源文件,其扩展名为.C,并且正在使用C语法突出显示,这是我所不希望的。

如何设置GitHub将C ++语法突出显示应用于这些文件?

GitHub是否有一种方法可以识别语法突出显示目的的源语言?

看起来它仅使用文件扩展名,但是有没有办法强制使用特定语言?

Answers:


9

我问了support@github.com; 这是他们的回复:

我们使用Pygments(http://pygments.org/)进行语法高亮显示,并根据每个文件的扩展名确定使用哪个词法分析器。因此,不幸的是,似乎没有一种方法可以在不重命名* .c-> * .cpp和* .h-> * .hpp文件的情况下获得C ++高亮显示。

使用该git mv命令,您可以做到这一点而不会丢失文件的git历史记录。


7

GitHub的语言检测是通过Linguist模块完成的,该模块方便地是开源的。它主要依靠文件扩展名来检测语言,尽管检测不明确的文件(例如.h文件)可能有点聪明。正如你可以从看到的配置文件.c牢固地定义为C文件。考虑到必须在GitHub上评估的文件数量,效率是一项关键要求,即使是以准确性为代价的。

似乎每个回购配置已被开发人员排除,因此像C ++一样突出显示文件语法的唯一方法是使用C ++扩展名。为了保留这些扩展名并突出显示它们,您可能必须尝试其他服务,或者将代码托管在自己的某个位置。

2014年10月更新:GitHub并没有停滞不前,去年他们引入了一些基本的启发式方法来帮助确定文件中的语言。更具体地针对此问题,.c现在检查文件以查看它们是C,C ++还是Objective-C。

GitHub支持的答案有点有趣,他们确实使用Pygments突出显示和词法分析器,但是规则集在其自己的Linguist模块中。您希望他们知道哪些!


3

对于带有Shebang的文件,在确定语言时会考虑使用Shebang,但似乎权衡其他令牌时 使用了Shebang。这似乎是一个很大的错误,因为Shebang应该明确定义文件的语言。这可能导致突出显示问题

作为一种解决方法,您可以以注释的形式添加虚拟标记,以“倾斜比例”以支持正确的语言。这是实验性的,但是我很幸运


1

在这里分享我的答案,是我在SO的其他地方发现的。

我发现您可以按照语言学家自述文件在源文件顶部添加vim或emacs modeline (不幸的是,每个文件都需要),以强制Github.com突出显示语法。基于language.yml文件,我认为您需要添加/* vim: syntax=C++ */到源文件中。


0

现在,您可以使用Linguist覆盖来强制存储库中任何文件的语言Linguist是检测github.com中文件语言的开源库。

要强制.c使用C ++语法突出显示文件,可以在.gitattributes文件中添加以下内容:

*.c linguist-language=C++

我已经尝试了这个,*.S linguist-language=asm但无济于事。……
mckenzm

@mckenzm您的消息似乎被截断了。.gitattributes您发布的行应强制语言学家将所有.S文件识别为程序集。如果它不起作用,我可以查看存储库以尝试查看发生了什么(您有链接吗?)。
pchaigno
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.