github - 如何在 Github 中使用语法高亮编写 diff 代码

标签 github markdown

Github 支持语法高亮如下:

```javascript
let message = 'hello world!'
```

它支持 diff 如下:(但没有语法高亮)
```diff
-let message = 'hello world!'
+let message = 'hello stackoverflow!'
```

我怎样才能同时获得 'syntax highlight' 和 'diff' ?

最佳答案

不,目前不支持此功能。

GitHub 在 github/markup 中记录了他们对轻量级标记语言(包括 Markdown 等)的处理。 .注意步骤 3:

  1. Syntax highlighting is performed on code blocks. See github/linguist for more information about syntax highlighting.


如果我们点击该链接,我们会找到 list of grammars Linguist 用于在 GitHub 上提供语法高亮显示。语言学家一次只能将该列表中的一种语法应用于代码块。当然,其中一种语法是Diff .但是,该语法对差异代码的语言一无所知,因此您不会获得语法高亮显示。

当然,还有其他语言经常结合使用。例如,HTML 通常包含在模板语言中。因此,除了 HTML语法,我们还找到 HTML+Django 的语法, HTML+ECR HTML+EEX , HTML+ERB , 和 HTML+PHP .在每种情况下,单一语法都知道两种语言。特定的模板语言和散布在模板中的 HTML。

要使用 diff 完成同样的事情,您需要为列出的每种语言使用单独的“diff”语法。换句话说,语法的数量将增加一倍。当然,避免这种情况的一种方法可能是处理 diff不同。当diff被指定时,他们可以通过语法高亮显示两次,一次用于 diff一次用于源语言。但是,至少在处理轻量级标记语言中的代码块时,他们还没有实现这样的功能。

而且,如果他们将来要实现这样的功能,那么简单地运行代码块两次可能会更加复杂。毕竟,diff 的每一行都有 diff 特定的内容,这会混淆其他语言的语法。因此,每个语法都需要区分差异,或者需要将每行单独提供给语法,并删除差异部分。后者的问题是语法没有每一行的上下文,更容易出错。这种解决方案是否可能超出了这个答案的范围,但重点是,由于所涉及的复杂性,可以合理地预期这种功能的支持优先级要低得多。

那么,为什么 GitHub 会在其网站的其他地方进行语法高亮呢?因为,在这些情况下,它可以访问正在比较的两个源文件并自己生成差异。首先突出显示每个源(避免上面提到的复杂性),然后从两个突出显示的源文件创建差异。但是,当 GitHub 第一次看到它时,包含在 Markdown 代码块中的 diff 已经是一个 diff。他们没有办法首先突出显示预差异代码。换句话说,他们当前使用的过程将无法转移到支持请求的功能。

关于github - 如何在 Github 中使用语法高亮编写 diff 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147310/

相关文章:

r - 使用 R Markdown 将 Logo 插入投影仪演示文稿

r - 如何定位和格式化表格标题的长度 [R Markdown, pander package]

windows - git 克隆卡在 "checking connectivity"

ruby - 使用局域网中的移动设备连接到本地构建的 Jekyll Server

GitHub API - 写入 repo

python - 在 Python 中允许 Markdown 的最佳实践,同时防止 XSS 攻击?

git - 如何在 GitHub 的存储库上设置 receive.denyNonFastForwards

github - GitHub Actions 中的嵌套模板(从另一个 yaml 文件调用 yaml 文件)

github - 将链接放置在 Markdown 代码块内

image - Jekyll-使用{{site.url}}将前面事物的图像路径声明为变量