0

我正在寻找一种快速将 <% %> 标记放在标记区域上的方法。我正在使用带有 rhtml 模式的 rinari。我想做这样的事情(我处于 rhtml 模式):

例如,我有一个红宝石代码

a.each do |e|
  puts e
end

我用 select-region 选择它,放一些魔法键,我得到了:

<% a.each do |e| %>
  <%= puts e %>
<% end %>

我要求它应该做得很聪明,例如,如果我选择了混有一些 HTML 标记的 ruby​​ 代码,它应该仅将 <% %> 应用于 ruby​​ 代码,而其余部分则不受伤害。另外,如果我什么都不选,它应该把 <% %> 的点放在中间,等待我的输入。我想知道类似的东西是否作为 emacs 函数或包存在?

我试图这样做,作为 YAsnippet mod 的一个片段,但它远非我喜欢的样子。

4

2 回答 2

1

如果您使用具有内置 GNU Awk 的操作系统,您可以使用那个简单的单行脚本:

(defun make-it-erb (begin end)
    "Add <%=? %> for each string"
    (interactive "r")
    (shell-command-on-region begin end "gawk '/^[ \t]*(puts)|(print)/{ printf \"<%=\" $0 \"%>\"; next } // { printf \"<%\" $0 \"%>\" } '" nil ""))
  (global-set-key [f7] 'make-it-erb)

您应该将它添加到您的 .emacs 文件中并评估上面的函数。

于 2012-09-18T12:09:23.783 回答
0

有一个不错的小实用程序,称为wrap region,您可能会发现它很有用。

PS 在 Emacs 中使用嵌入式 ruby​​ 代码通常是一件令人头疼的事情——我尝试过 rhtml 和 mumamo,但没有发现它们特别精致。最后我决定使用HAMLSlim - 更好的模板语言,具有可靠的 Emacs 支持。

于 2012-09-18T16:16:49.263 回答