在Jekyll中突出显示markdown代码块的语法(不使用液体标签)

时间:2011-12-27 19:21:42

标签: syntax-highlighting markdown jekyll redcarpet

似乎Jekyll中的语法突出显示仅限于使用液体标签和pygments:

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

但是我从wordpress导入了我现有的博客,它是用markdown编写的(使用markdown代码块),我不想通过每个帖子修复代码块。此外,我想以纯缩写格式保留我的帖子,以防我再次需要切换博客平台。

我将我的Jekyll解析器切换到redcarpet,希望我能使用这种降价语法:

```bash
cd ~
```

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

9 个答案:

答案 0 :(得分:20)

围栏块 were introduced 与Redcarpet 2. Jekyll now supports Redcarpet 2。

另外,我正在使用Redcarpet Rouge 直到 Kramdown support 是可用的。

另外有些人更喜欢 Nanoc 到杰​​基尔。

答案 1 :(得分:15)

替代解决方案

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

## A section

Here is some Ruby code.

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

然后,您可以使用Highlight.js(文档here)根据该类添加突出显示。

这不是一个理想的解决方案,但它应该适用于任何Markdown解析器。

答案 2 :(得分:8)

我最后切换到kramdown来解析与coderay一起提供的markdown以进行语法突出显示。这样做的好处是可以在heroku上运行的纯红宝石解决方案。

答案 3 :(得分:4)

第1步。安装Redcarpet

gem install redcarpet

第2步。更新_config.yaml中的构建设置。

# Build settings
#markdown: kramdown
markdown: redcarpet

答案 4 :(得分: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

答案 5 :(得分:1)

Redcarpet默认集成到Jekyll中,代码突出显示将按预期运行。

对于较旧的Jekyll博客:

  1. 安装redcarpet gem:

    gem install redcarpet

  2. 更新_config.yaml

    markdown: redcarpet
    
  3. 有关参考和进一步信息,请参阅:

    Closed Github Issue

    Updated Jekyll Codebase

答案 6 :(得分:0)

我已经描述了两种替代解决方案,可以将正确格式化的代码段添加到您的Jekyll驱动网站。 http://demisx.github.io/jekyll/2014/01/13/improve-code-highlighting-in-jekyll.html。它们不依赖于第三方插件,并且与免费的GitHub Pages托管兼容。

答案 7 :(得分: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/了解详情。

答案 8 :(得分:0)

You can also use the triple-tilde syntax:

~~~ruby
class Base
  def two
    1 + 1
  end
end
~~~

which is supported by Kramdown (Jekyll).