Одна из возможных причин, почему это так, заключается в том, что фрагмент, который генерирует угловые скобки для вас, определяется следующим образом:
<%= $0 %>
Это помещает этот текст в ваш источник после срабатывания триггера табуляции. $0
является заполнителем для курсора; это место последнего упокоения после того, как фрагмент будет готов. Поскольку курсор находится посередине, а это простой фрагмент, повторное выполнение триггера табуляции будет заключать эти скобки.
Чтобы достичь того, что вы хотите, вы должны сделать это в сценарии. Вы можете использовать любой язык сценариев, если вы укажете строку shebang. Я не опытный сценарист, поэтому я попытаюсь решить эту проблему с помощью псевдокода.
if selected_text
if no_wrapping_angle_brackets
surround_with_angle_brackets
else
strip_angle_brackets
else
if no_wrapping_angle_brackets
surround_with_angle_brackets
else
strip_angle_brackets
Это немного, но я надеюсь, что это поможет