首页 > 解决方案 > 如何消除erb中的换行符

问题描述

我正在尝试将 ERB 与纯文本文件一起使用。这是纯文本文件的内容:

<% if true %>
<%= 'bar' %>
<% end %>
<%= 'foo' %>
<%= 'bar' %>

我用 ERB 得到的结果是:

bar

foo
bar

我想要得到的结果是:

bar
foo
bar

在“bar”和“foo”之前没有空换行符。

现在,我知道这是因为 ERB 被配置为(默认情况下)处理 HTML 文件。在我的情况下,我想要它做的是使用纯文本文件。我知道这是“以某种方式”可能的,因为在 Rails 中,当您使用 Rails 邮件程序配置纯文本文件时,这不会发生。

这是我正在尝试做的事情的总体情况:我正在尝试写一篇纯文本文章,但中间有一些 Ruby 代码。我想我会为此使用 ERB,但我遇到的第一个绊脚石就是这个。

标签: ruby-on-railsrubyerb

解决方案


在其默认模式下,ERB 在<% ... %>表达式之外非常字面地处理文本。所以把你的文本想象成一个看起来像这样的流:

<% if true %><LF><%= 'bar' %><LF><% end %><LF><%= 'foo' %><LF><%= 'bar' %><LF>

如您所见,您将在“bar”之前获得一个换行符,在“foo”之前获得两个换行符。,输出将是:

<blank line>
bar
<blank line>
foo
bar

解决方法是使用“修剪模式”选项erb。将您的文件写为:

<% if true -%>
<%= 'bar' %>
<% end -%>
<%= 'foo' %>
<%= 'bar' %>

然后打电话erb -T - your_erb_file.erb

bar
foo
bar

如果行以 . 结尾,则告诉删除行-T -尾。如果指令以 . 开头,则会删除前导空格。例如,有关详细信息,请参见本手册页erb-%>erb<%-erb


推荐阅读