我注意到有时我的代码在渲染时会以不同的颜色突出显示。


什么是语法突出显示?
它如何工作?
为什么我的代码不是被正确突出显示?
如何报告错误或请求新语言?
如何使用语法突出显示?
Stack Exchange当前提供哪些语言?

返回常见问题索引

评论

我有一个问题:为什么SE员工(一个人)不会进一步报告此类基本错误?该人员将阅读一次Highlight.js的所有问题列表,并可以轻松地确定它是否是错误。当您看到如此突出的错误时,这看起来真的很不专业... SE选择了该库,因此我认为-SE有责任向highligt.js进一步报告此类错误-特别是在此过程复杂的情况下(每个人都了解所有问题列表)。我错了吗?

#1 楼

什么是语法突出显示?
语法突出显示允许根据所写语言突出显示帖子中的代码,以使其更易于阅读。
它如何工作?有自己的语法高亮引擎。它使用highlight.js,不一定使用该库的最新版本。因此,Stack Exchange无法处理与语法突出显示有关的任何错误和功能请求。
在您停止键入5秒钟后,在创建或编辑帖子时,将基于标签将语法突出显示分配给预览。 />为什么我的代码无法正确突出显示?
1。检查您正在使用的网站是否启用了语法突出显示
完整列表可在Meta上找到。如果未在站点上启用语法突出显示,请按照此问题中的说明进行操作。
2。检查highlight.js是否支持该语言。
查看highlight.js支持的语言列表。如果您的语言不在列表中,则需要先在highlight.js项目中创建该语言,然后才能由Stack Exchange部署。
如果该语言已在列表中但未在Stack Exchange中使用,请提出Meta上的功能请求,以将其部署到网络上。
3。检查Stack Exchange是否使用该语言。查看dev CDN上的highlight-loader.js文件,在您喜欢的编辑器中打开它,然后搜索语言提示。例如,搜索“飞镖”会将您带到包含hljs.registerLanguage('dart', ...的行。这意味着lang-dart是可用的语言提示。搜索“ psh”或“ powershell”不会返回任何结果,这意味着Highlight.js的Stack Exchange版本不支持psh。
4。检查问题标签是否启用了语法突出显示
在后台,Stack Exchanges使用问题上的标签来确定您使用的语言。每个标签在其属性中都有突出显示的语言,或者没有语言。如果有多个标签指定了突出显示语言,或者没有一个标签指定了突出显示语言,则它会使用默认设置,并让Prettify推断出最适合使用的语言。问题的答案也使用相同的突出显示语言。
访问该标记的Wiki页面。单击一个标签(例如“ javascript”),然后单击“了解更多...”,当前用于该标签的语言提示(如果有)将显示在最底部, Wiki:



如果该标记未在应使用的位置指定突出显示语言,则在每个站点元上创建功能请求,以供您的站点请求它。 (只有主持人可以更改标签的突出显示语言。)
如何报告错误或请求新的语言?
如果确实是语法突出显示工具中的错误,请首先检查现有报告查看它是否已经被报告;如果还没有,请继续进行报告。对于Highlight.js已实现但在此处无法使用的错误修复和功能,可以在Meta上提出功能请求以请求部署新版本的Highlight.js。 Stack Exchange不会维护此语法突出显示器(除了安装它的较新版本),并且在Meta上将与之相关的错误报告或功能请求发布到此处不会使它们得到修复或实现。
执行任何操作之前,请确保您已启用正确的突出显示。
如何使用语法突出显示?
只要“为什么我的代码未正确突出显示”中的所有条件?上面的部分已满足,突出显示将根据问题上的标签在代码块上自动启动。 (请参见4。检查问题的标签上方是否启用了语法突出显示功能。)内联代码(例如this)未突出显示。
可以显式覆盖在通过在代码块上方指定语言提示,将您选择的语言张贴在特定代码块中。请注意,仅在使用代码围栅(```)代码格式化方法时才支持此功能。从CommonMark的实现开始,不再支持使用四空间缩进方法在代码块上执行此操作*:
```lang-or-tag-here
code goes here
```

您可以在语言提示中使用语言代码或标记名来激活语法突出显示。请参阅以下有关Prettify支持的语言代码的完整列表。
例如:
Here is a code block with language code (with "lang-" prefix) as a hint:

```lang-js
function greet(person) {
    return "Hello " + person;
}
var user = "John Doe";
alert(greet(user));
```

Here is a code block with tag name (no "lang-" prefix) as a hint:

```typescript
var arr = [0, 1, 2];  // will highlight if typescript tag exists
```

如果不想突出显示任何语法,则可以使用lang-none语言:
```lang-none
[code here]
```

您还可以将语言提示应用于帖子中的所有代码块,因此不必在每个帖子之前添加提示,只需在帖子顶部添加HTML注释即可。然后,该提示将应用于您帖子中的所有代码块,包括那些使用四空格缩进或HTML的代码块。在其答案上;默认情况下,仍会根据问题的标签突出显示这些代码。

Stack Exchange当前可用的语言代码
这是您可以在语言提示中用于语法突出显示的每个标识符的完整列表。每个组中的所有这些语言提示均指向同一荧光笔。由highlight.js设置的其他语言别名可能也可以使用,但是Stack Exchange仅正式支持以下标识符。 >

无:明确不使用任何语法高亮显示
<pre><code>lang-defaultlang-nonelang-plaintext


Bash
lang-textlang-txtlang-bash


C,C ++和其他C-likes
lang-shlang-zshlang-clang-hlang-cpplang-hpplang-c++lang-h++lang-cclang-hh,q4312079 >

C#
lang-cxxlang-hxxlang-c-like


Clojure
lang-cslang-csharp


CoffeeScript
lang-c#lang-clojurelang-cljlang-coffee


CSS
lang-coffeescript


Dart
lang-cson


Erlang
lang-icedlang-css


Go
lang-dartlang-erl



哈斯克尔
lang-erlanglang-go


HTML,XML,XSL等
lang-golanglang-hslang-haskelllang-htmllang-xmllang-xsllang-xhtmllang-rsslang-atom,q4312079


HTTP标头
lang-xjblang-xsd


Ini和TOML
lang-plistlang-wsf


Java
lang-svglang-http


JavaScript
lang-httpslang-inilang-tomllang-javalang-jsp


> JSON
lang-js


科特林
lang-javascriptlang-jsx


LaTeX,TeX
lang-mjslang-cjs


更少
lang-json


Lisp
lang-kotlin


Lua
lang-kt


Makefile
lang-latexlang-texlang-less


降价
lang-lisplang-lualang-makefilelang-mk


MATLAB
lang-mak


Objective-C
lang-markdownlang-mdlang-mkdownlang-mkd



OCaml
lang-matlablang-objectivec

>
Pascal,Delphi
lang-mmlang-objclang-obj-clang-ocamllang-mllang-pascallang-delphilang-dprlang-dfm


Perl
lang-paslang-freepascal lang-lazarus


PHP
lang-lprlang-lfmlang-pllang-perllang-pmlang-php


PHP模板
lang-php3
/>

协议缓冲区
lang-php4


Python
lang-php5lang-php6lang-php7lang-php-template


R
lang-protobuf


Ruby
lang-pylang-pythonlang-gyplang-ipythonlang-rlang-rb



lang-rubylang-gemspec


Scala
lang-podspec


方案
lang-thor


SCSS
lang-irb


Shell
lang-rslang-rust


SQL
lang-scala


Swift
lang-scheme


TypeScript
lang-scsslang-shell


VHDL
lang-console


VB.NET
lang-sqllang-swift


YAML
lang-typescriptlang-ts


突出显示功能无法识别的帖子在功能上将默认设置为lang-vhdl。可以为null(无提示),默认值或特定的语言代码。
请记住,默认情况下,所有标签均以lang-vbnet作为其语言代码开头。指定为lang-vb作为其语言代码的标签将被忽略并恢复为lang-yaml。您还可以使用普通的lang-yml关键字手动指定不语法突出显示,类似于上面的lang-default代码。 > *前一种指定突出显示语言的方法仍可用于HTML代码块:将HTML注释none放在none标记之前,它将起作用。空格缩进的代码块,但仅不推荐使用。虽然暂时仍可在四空间缩进的代码块上使用,但将来可能会/将其删除。


编辑者注意:除非您100%确信存在,否则将其添加到上面的列表中。请记住,无效的标识符会恢复为默认值。



此外,由于必须由Stack Exchange手动安装新版本的highlight.js,因此Highlight中指示支持的语言。 js的文档可能实际上未受到Highlight.js的Stack Exchange版本的支持。在列表中添加新提示。
注释者注意:请不要问将来是否会支持某些语言。这不是我们可以回答的问题,因为Stack Exchange不维护此荧光笔。请访问Highlight.js以获取语言支持。


评论


对于使用语言代码或标记名称(可能带有某些限定词),此答案中是否应该没有明确的偏好(不是规则)?例如。 “除非使用Z,否则最好使用X而非Y。” (有关MSO的一些相关问题(在注释中):关于语法突出显示,两种代码格式样式(代码围栏与缩进块)之间有何区别?)

–P.Mort。 -忘记了粘土Shirky_q
20-10-16在16:00



以下部分缺少一些关键信息:在Meta上将错误报告或与此功能相关的功能请求发布到此处将无法修复或实现它们。当受到上游修复的错误影响时,它完全省去了该做什么。

–JamesTheAwesomeDude
20-10-23在22:23

第二句话不是@JamesTheAwesomeDude之后的意思吗? “对于highlight.js已实现但在此处无法使用的错误修复和功能,可以在Meta上提出功能请求,以请求部署新版本的highlight.js。”如果不是,那不是说您需要知道什么?

–本是倒退的
20-10-24在3:23



@benisuǝqbackwards-我不知道我怎么想念它!

–JamesTheAwesomeDude
20-10-26在20:20

并且它将使用与该标签当前关联的任何语言代码。在任何地方都可以找到这些映射的正式列表?

–乔什·戈贝尔(Josh Goebel)
20-10-29在1:05

第4节“ 4.检查问题的标签是否启用了语法突出显示”,具有所有信息,以查找@JoshGoebel

–本是倒退的
20-10-29在5:41



@Josh直接的问题是,我不相信当前有任何列表包含所有带有相关语言的标签。它也似乎也不可以使用SEDE访问此信息,它也不在标签表中。

–zcoop98
20-10-29在14:32



PowerShell是否没有lang- *标签?

–托马斯
20 Dec 17'7:38

Powershell当前使用默认的@Thomas(请参阅页面底部)。如果列表上没有任何内容,则没有任何内容。

–本是倒退的
20 Dec 17 '11:00