如何使用 redcarpet gem(Ruby on Rails)去除额外的空间
How to get rid of additional spaces using redcarpet gem (Ruby on Rails)
我正在尝试使用 markdown 写博客,并决定安装 redcarpet gem。一切看起来都很好,pygments.rb 在语法高亮方面做得很好, 但是 问题是,每当我尝试使用 ```
放置代码块时,我得到所有行(第一个除外)缩进 6 个额外的空格。如何摆脱它?
application_helper.rb
module ApplicationHelper
class HTMLwithPygments < Redcarpet::Render::HTML
def block_code(code, language)
Pygments.highlight(code, lexer: language)
end
end
def markdown(content)
renderer = HTMLwithPygments.new(hard_wrap: true, filter_html: true)
options = {
autolink: true,
no_intra_emphasis: true,
disable_indented_code_blocks: true,
fenced_code_blocks: true,
lax_html_blocks: true,
strikethrough: true,
superscript: true
}
Redcarpet::Markdown.new(renderer, options).render(content).html_safe
end
end
Post 视图 - show.html.haml
.container
.show.title
= @post.title
.show.header
= @post.header
.show.created_at
= @post.created_at
.show.content
= markdown @post.content
代码在 sublime 中是这样的:
这是 post 的呈现方式,将相同的代码复制粘贴到 post 内容:
我使用的是带有 2 个空格缩进的 SublimeText3,视图采用 html.haml 格式。
这是post内容的准确输入:
```ruby
module ApplicationHelper
class HTMLwithPygments < Redcarpet::Render::HTML
def block_code(code, language)
Pygments.highlight(code, lexer: language)
end
end
def markdown(content)
renderer = HTMLwithPygments.new(hard_wrap: true, filter_html: true)
options = {
autolink: true,
no_intra_emphasis: true,
disable_indented_code_blocks: true,
fenced_code_blocks: true,
lax_html_blocks: true,
strikethrough: true,
superscript: true
}
Redcarpet::Markdown.new(renderer, options).render(content).html_safe
end
end
这是由于 Haml 缩进了块,以便输出 HTML 格式整齐,这通常是人们想要的,但可能会导致像这样的空白敏感代码出现问题。
有几种方法可以修复它。首先,如果您 运行 将 :ugly
option 设置为 true(在生产中应该是这种情况),那么额外的空格将不会添加到任何地方,您将获得所需的结果。
或者您可以使用 whitespace preservation operator ~
而不是 =
。这会将块中的所有换行符转换为实体 (

),因此不会添加额外的空格(因为没有要添加的换行符)。这将更改 HTML 生成的内容,但在浏览器中查看时会显示您想要的内容。
我正在尝试使用 markdown 写博客,并决定安装 redcarpet gem。一切看起来都很好,pygments.rb 在语法高亮方面做得很好, 但是 问题是,每当我尝试使用 ```
放置代码块时,我得到所有行(第一个除外)缩进 6 个额外的空格。如何摆脱它?
application_helper.rb
module ApplicationHelper
class HTMLwithPygments < Redcarpet::Render::HTML
def block_code(code, language)
Pygments.highlight(code, lexer: language)
end
end
def markdown(content)
renderer = HTMLwithPygments.new(hard_wrap: true, filter_html: true)
options = {
autolink: true,
no_intra_emphasis: true,
disable_indented_code_blocks: true,
fenced_code_blocks: true,
lax_html_blocks: true,
strikethrough: true,
superscript: true
}
Redcarpet::Markdown.new(renderer, options).render(content).html_safe
end
end
Post 视图 - show.html.haml
.container
.show.title
= @post.title
.show.header
= @post.header
.show.created_at
= @post.created_at
.show.content
= markdown @post.content
代码在 sublime 中是这样的:
这是 post 的呈现方式,将相同的代码复制粘贴到 post 内容:
我使用的是带有 2 个空格缩进的 SublimeText3,视图采用 html.haml 格式。
这是post内容的准确输入:
```ruby
module ApplicationHelper
class HTMLwithPygments < Redcarpet::Render::HTML
def block_code(code, language)
Pygments.highlight(code, lexer: language)
end
end
def markdown(content)
renderer = HTMLwithPygments.new(hard_wrap: true, filter_html: true)
options = {
autolink: true,
no_intra_emphasis: true,
disable_indented_code_blocks: true,
fenced_code_blocks: true,
lax_html_blocks: true,
strikethrough: true,
superscript: true
}
Redcarpet::Markdown.new(renderer, options).render(content).html_safe
end
end
这是由于 Haml 缩进了块,以便输出 HTML 格式整齐,这通常是人们想要的,但可能会导致像这样的空白敏感代码出现问题。
有几种方法可以修复它。首先,如果您 运行 将 :ugly
option 设置为 true(在生产中应该是这种情况),那么额外的空格将不会添加到任何地方,您将获得所需的结果。
或者您可以使用 whitespace preservation operator ~
而不是 =
。这会将块中的所有换行符转换为实体 (

),因此不会添加额外的空格(因为没有要添加的换行符)。这将更改 HTML 生成的内容,但在浏览器中查看时会显示您想要的内容。