Rails Redcarpet 的 Markdown 为什么需要敲两次回车才能换行?

hlcfan · 2012年05月14日 · 最后由 rdongxie 回复于 2014年11月26日 · 19792 次阅读

Redcarpet 的 Markdown 为什么需要敲两次回车才能换行? thx。

Markdown 语法就是这样的吧,用 vi 编辑 markdown 文件到 80 个字符就会自动换行,可读性会更好

Markdown 基本的规则就是这样的:

段落和换行

一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行(空行的定义是显示上看起来像是空的,便会被视为空行。比方说,若某一行只包含空格和制表符,则该行也会被视为空行)。普通段落不该用空格或制表符来缩进。

「由一个或多个连续的文本行组成」这句话其实暗示了 Markdown 允许段落内的强迫换行(插入换行符),这个特性和其他大部分的 text-to-HTML 格式不一样(包括 Movable Type 的「Convert Line Breaks」选项),其它的格式会把每个换行符都转成
标签。 如果你确实想要依赖 Markdown 来插入
标签的话,在插入处先按入两个以上的空格然后回车。

的确,需要多费点事(多加空格)来产生
,但是简单地「每个换行都转换为
」的方法在 Markdown 中并不适合,Markdown 中 email 式的 区块引用 和多段落的 列表 在使用换行来排版的时候,不但更好用,还更方便阅读。

可以参考这里 http://wowubuntu.com/markdown/#p

#1 楼 @flyerhzm 你好,我想敲一个回车,他便换行。有什么解决方法吗? ruby-china 就是一个回车,便换行。

#3 楼 @hlcfan 那是因为 Ruby China 特意修过的

#4 楼 @huacnlee 华顺,能告诉我改哪里了?

哦,我记错了,不是特别修改的,只是一个参数而已,应该是这个: https://github.com/ruby-china/ruby-china/blob/master/config/initializers/markdown.rb#L10

#6 楼 @huacnlee 我有加 hard_wrap,我是这么写,你看可以吗?

def markdown(text)    
    assembler = Redcarpet::Markdown.new(Redcarpet::Render::HTML,
    :autolink => true, :filter_html => true, :hard_wrap => true)
      assembler.render(text)  
end

#6 楼 @huacnlee 是的,加了text.gsub!("\n","\n\n")

#7 楼 @hlcfan 我看不懂你在对我说什么。 你现在这段能得到预想的效果吗?

我一直以為那是因為我們用瀏覽器看所以才沒有換行…

在 HTML 裡面直接按回車並不會出現換行,如你所知,要有 <br> 才行。而 Markdown 則是直接把段落裡面的字元一個一個放進 <p> 裡面,所以才會看起來沒有換行,實際上輸出的 HTML 是有換行的。

測試的檔案內容:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris 
nisi ut aliquip ex ea commodo consequat. 

沒有 hard_wrap:

as = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new)
puts as.render(File.open("test.md", "r").read)
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p>

<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris 
nisi ut aliquip ex ea commodo consequat. </p>

有 hard_wrap:

as = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(:hard_wrap => true))
puts as.render(File.open("test.md", "r").read)
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, <br>
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p>

<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris <br>
nisi ut aliquip ex ea commodo consequat. </p>

#3 楼 @hlcfan 你应该试试这个 http://github.github.com/github-flavored-markdown/

markdown 有很多不同的 fork,很多就取消掉了这个换行。。github 这个比较流行

#9 楼 @huacnlee 是我搞错了,哈哈。现已 ok,thx.

#11 楼 @ninehills thx.checking it out.

需要 登录 后方可回复, 如果你还没有账号请 注册新账号