Я пытался использовать классную возможность YASnippet: писать сниппеты, содержащие встроенный код Emacs Lisp. Существует фрагмент для rst-mode, который окружает введенный текст знаком "=", длина которого равна длине текста, например, в
====
Text
====
Основываясь на этом фрагменте, я решил немного изменить его (с помощью Elisp), чтобы он закомментировал эти три строки в зависимости от основного режима, в котором вы находитесь (я подумал, что такой фрагмент будет полезен для организации исходного кода). Итак, я написал это:
${1:`(insert comment-start)`} ${2:$(make-string (string-width text) ?\-)}
$1 ${2:Text}
$1 ${2:$(make-string (string-width text) ?\-)}
$0
Этот код работает относительно хорошо, за исключением одной проблемы: отступы этих трех строк смешиваются в зависимости от основного режима, в котором я нахожусь (например, в emacs-lisp-mode вторая и третья строки сдвигаются вправо. чем первая строка).
Я думаю, что источник проблемы может иметь какое-то отношение к тому, что идет после строки ${1:
в первой строке. Если я добавлю символ, у меня не будет проблем (т.е. все три строки правильно выровнены в конце раскрытия фрагмента). Если я добавлю один пробел после этой строки, проблема смещения все равно не исчезнет.
Итак, мой вопрос: знаете ли вы какой-либо способ переписать этот фрагмент, чтобы не возникало этого несоответствия? Вы знаете, в чем причина такого поведения?
Ваше здоровье,