การหลีกเลี่ยงวงเล็บปีกกาสองชั้นภายในบล็อกรหัส markdown ใน Jekyll


89

ฉันใช้ Jekyll เพื่อสร้างไซต์เอกสารซึ่งฉันกำลังพยายามจัดทำเอกสารบางรหัสที่มีไวยากรณ์ที่คล้ายกับแฮนด์บาร์ ตัวอย่างเช่น{{foo}}. ปัญหาคือ Jekyll ใช้แท็กของเหลวและไม่ว่าฉันจะทำอะไรก็ตามลอนคู่ของฉันกำลังถูกฉีกออกโดยตัวประมวลผลของเหลว

ยังไงก็ตามฉันใช้ kramdown เป็นตัวประมวลผลมาร์คดาวน์

นี่คือสิ่งที่ฉันได้ลอง:

{% highlight html linenos %}
  Hello, my name is {{name}}.
{% endhighlight %}

อันนี้ลบส่วน {{name}} ทั้งหมดเพราะคิดว่าเป็นการอ้างอิงถึงตัวแปรของเหลว

ฉันลองสิ่งนี้ด้วย:

{% highlight html linenos %}
  Hello, my name is \{\{name\}\}.
{% endhighlight %}

ในกรณีนี้ฉันกำลังพยายามหลีกเลี่ยงวงเล็บปีกกา แต่ผลที่ได้คือเครื่องหมายทับจะแสดงผลในหน้า

ฉันยังลองสิ่งนี้:

{% highlight html linenos %}
  Hello, my name is <span>{</span>{name}}.
{% endhighlight %}

เป็นที่ยอมรับว่าคนนี้ค่อนข้างโง่ ในกรณีนี้เนื่องจากฉันได้ระบุไวยากรณ์เป็น html (ซึ่งจำเป็นต้องเป็น) แท็กช่วงจะแสดงผลในหน้า

แล้วฉันจะแก้ไขปัญหานี้ได้อย่างไรในโลกนี้?

คำตอบ:


184

คุณกำลังมองหา{% raw %}แท็ก

{% raw %}
Hello, my name is {{name}}.
{% endraw %}

6
อ๊ะฮะ! คุณคือเพื่อนใหม่ที่ดีที่สุดของฉัน
rescuecreative

ขอบคุณนี่คือสิ่งที่ฉันต้องการ
wukong

ขอบคุณ ... สิ่งนี้ทำให้ฉันแทบคลั่ง
learningMachine

จะเกิดอะไรขึ้นถ้ารหัสที่คุณต้องการใช้ใน esacape เป็นไป{% raw %} {{...}} {% endraw %}ตามที่อาจพบในบล็อกโพสต์ที่พูดถึงเรื่องนี้?
starfry

3
@starfry: ตลกดีที่คุณควรถาม ... blog.slaks.net/2013-06-10/jekyll-endraw-in-code
SLaks

33

คุณสามารถใช้{% raw %}เพื่อให้แน่ใจว่า Jekyll ไม่มีการดัดแปลงเนื้อหา:

{% raw %}
This is inserted literally: {{foo}}
{% endraw %}

อย่างไรก็ตามทราบว่านี้ไม่ได้การป้องกันรหัส คุณจะต้องมีการจัดรูปแบบโค้ดเพิ่มเติมเพื่อให้เนื้อหาของคุณแสดงเป็นโค้ด:

{% raw %}
    I'm a code block, because I'm indented by 4 spaces
{% endraw %}
{% raw %}
```handlebars
I'm a code block that contains {{handlebars}}
with highlighting.
```
{% endraw %}

ขอบคุณสำหรับการเพิ่มเติม ฉันลงเอยด้วยการทำอะไรที่น่าเกลียดกว่าที่เคย{% raw %}{{ foo }}{% endraw %}เกิดขึ้นทุกครั้งดังนั้นฉันจะดูสิ่งที่คุณทำที่นี่
rescuecreative

นี่เป็นโซลูชันที่ยืดหยุ่นกว่าเนื่องจากช่วยให้สามารถเก็บบล็อกโค้ดและไวยากรณ์ไว้ได้
Kiddo

20

ด้วย jekyll รหัสคือ:

{% highlight html%}
{% raw %}
     <h2> {{ user.name.first | uppercase }}</h2>
     <p> {{ user.email }}</p>
{% endraw %}
{% endhighlight %}

นี่คือทางออกที่แน่นอน ขอบคุณ!
Jerad Rutnam

สิ่งที่น่าสังเกต: งานข้างต้นรวมถึงปากกาเน้นข้อความ Rouge อย่างไรก็ตาม raw จะใช้งานไม่ได้หากใช้ไวยากรณ์ที่มีรั้วกั้นเพื่อเน้นโค้ด (แบ็คทิกสามตัวนำหน้าเช่น `` html ... )
Frank Nocke

5

สำหรับการอ้างอิงในอนาคต: ใช้ธรรมดา{% raw %}และ{% endraw %}เป็นเพียงทางออกที่ดีที่สุดอันดับสองเนื่องจากจะแสดงหากคุณค้นหา Markdown บน github.com ปกติ

วิธีที่ดีที่สุดคือใส่{% raw %}และ{% endraw %}แสดงความคิดเห็น HTML:

<!-- {% raw %} -->
something with curlky brackets like { this } and { that }
<!-- {% endraw %} -->

เนื่องจากความคิดเห็น HTML Github เห็นเป็นความคิดเห็น ในหน้า Github แท็กดิบจะป้องกันการแยกวิเคราะห์ของวงเล็บปีกการะหว่างแท็ก


3

สิ่งนี้ใช้ได้ในjekyll :

{%raw%}{{thing}}{%endraw%}

FYI ฉันรวมคำพูดกลับสามครั้งเพื่อแสดงให้เห็นว่าบล็อกรหัสภายใน Jekyll จะใช้งานได้ ไม่ได้ตั้งใจสร้างบล็อคโค้ดในการตอบกลับ :)
Lisa Sinclair
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.