Emacs и встроенные теги ruby ​​<%%>

Я ищу способ быстро разместить теги <%%> в отмеченном регионе. Я использую Rinari с RHTML-режиме. Я хочу сделать такую ​​вещь (я в режиме rhtml):

Например, у меня есть код рубина

a.each do |e|
  puts e
end

и я выбираю его с помощью select-region, вставляю магический ключ и получаю:

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

Мне нужно, чтобы это делалось разумно, например, если я выбрал код ruby ​​с несколькими HTML-тегами, он должен применять <%%> только к ruby-коду, а остальное не пострадало. Кроме того, если я ничего не выбираю, он должен поместить <%%> с точкой прямо посередине, ожидая моего ввода. Мне интересно, существует ли что-то подобное в качестве функции или пакета emacs?

Я пытался сделать это, как фрагмент для мода YAsnippet, но это далеко не то, что мне нравится.

2 ответа

Решение

В случае, если вы используете ОС со встроенным 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 и оценить функции выше.

Существует небольшая полезная утилита, называемая областью переноса, которая может оказаться полезной.

PS Работа со встроенным рубиновым кодом в Emacs, как правило, очень неприятна - я пробовал rhtml и mumamo, но не нашел их особенно отточенными. В конце концов я решил использовать шаблоны HAML и Slim - более приятные шаблоны с надежной поддержкой Emacs.

Другие вопросы по тегам