在Jekyll中对Markdown代码块进行语法高亮(不使用liquid标签)

50

似乎在 Jekyll 中的语法高亮仅限于使用液态标签和 Pygments,如下所示:

{% highlight bash %}
cd ~
{% endhighlight %}

但是我已经从WordPress导入了我的现有博客,并且它使用markdown编写(使用markdown代码块),我不想逐个修复代码块。此外,我希望保留我的文章以纯markdown格式保存,以防需要再次切换博客平台。

我将Jekyll解析器切换为redcarpet,希望我可以使用这种markdown语法:

```bash
cd ~
```

但是它似乎不起作用。 它只是将其包装在普通的代码块中。 有什么想法吗?


4
我刚刚注意到这个未解决的问题:https://github.com/mojombo/jekyll/issues/427 - markquezada
官方文档:http://jekyllrb.com/docs/posts/#highlighting-code-snippets - Benjamin Crouzier
1
@iPython 这个问题是在2014年12月8日20:14创建的。而这个问题之前,即2011年12月27日19:21就已经创建了,几乎相隔了3年。 - markquezada
8个回答

25

1
我最近一直在使用Nanoc,非常喜欢它。 - Nathan Long

18

替代方案

Markdown允许使用HTML,如果你不介意添加一点JS,你可以这样做:

## A section

Here is some Ruby code.

<pre>
  <code class="ruby">
    puts "hello"
  </code>
</pre>

接下来可以使用Highlight.js(文档在这里)根据该类别添加突出显示。

这不是理想的解决方案,但它应该能够与任何Markdown解析器一起使用。


9

我最终改用kramdown解析Markdown,它内置coderay进行语法高亮。这种方法的好处是纯Ruby实现,适用于Heroku。


5
谢谢。看起来kramdown不认识```r,尽管它能识别用波浪线包裹的代码块~~~。 - cboettig
@mirthlab 看起来在数学和代码方面运行得非常好,谢谢。 - oblitum

7
步骤1:安装Redcarpet
gem install redcarpet

第二步。 修改您的_config.yaml构建设置,如下所示。

# Build settings
#markdown: kramdown
markdown: redcarpet

1

Redcarpet默认集成到Jekyll中,代码高亮将按预期运行。

对于旧版的Jekyll博客:

  1. Install redcarpet gem:

    gem install redcarpet

  2. Update _config.yaml

    markdown: redcarpet
    

参考和进一步信息请见:

已关闭的Github问题

更新的Jekyll代码库


1
在最新的Jekyll中支持代码块,但如果您使用旧版本,则需要进行修改。
以下是如何操作? 尝试将以下文件添加为您的_plugin/triple-backtick.rb
module Jekyll
  class MarkdownConverter
    alias :old_convert :convert
    def convert(content)
      content.gsub!(/(?:^|\n)```(\w*)\n(.*\n)```\n/m) do |text|
        cls = $1.empty? ? "prettyprint" : "prettyprint lang-#{$1}"
        "<pre class=\"#{cls}\"><code>#{$2}</code></pre>"
      end
      old_convert(content)
    end
  end
end

0

我也遇到了这个问题,经过在很多地方摸索后,终于意识到在Jekyll中使用官方的redcarpet2支持非常简单。 在你的_config.yml文件中写入以下内容:

# Conversion
markdown: redcarpet
highlighter: pygments
redcarpet:
  extensions: ["no_intra_emphasis", "fenced_code_blocks", "autolink", "strikethrough", "superscript"]

请确保您拥有pygments css文件并已将其包含在内。这一步非常重要

您可以阅读我的博客文章http://blog.championswimmer.in/2015/10/jekyllsyntax-highlighting-in-github-favoured-markdown-codeblocks/了解详情。


2
博客文章的链接已损坏。 - sieste
使用这个方法,您将从Github收到一封错误电子邮件;“您当前正在使用已不再受GitHub Pages支持并可能随时停止工作的'redcarpet' Markdown引擎。为确保您的站点继续构建,请删除站点的“_config.yml”文件中的'markdown'设置并确认您的站点按预期呈现。有关更多信息,请参见https://docs.github.com/github/working-with-github-pages/setting-a-markdown-processor-for-your-github-pages-site-using-jekyll。” - swiss_knight

0
你还可以使用三个波浪线的语法:
~~~ruby
class Base
  def two
    1 + 1
  end
end
~~~

这是由Kramdown(Jekyll)支持的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接