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.