Это работает правильно с моей конфигурацией, но я подозреваю, что это связано с автоматическим отступом (мой сильно настроен, так что может быть разница). Вы все еще видите проблему, если вы добавляете
# expand-env: ((yas/indent-line 'fixed))
или
# expand-env: ((yas/indent-line t))
к заголовку фрагмента? Вы также можете попробовать добавить $>
в строку (и), для которой вы хотите сделать отступ, чтобы увидеть, будет ли это иметь значение (если это приведет к значительному сужению). В коде yasnippet есть примечание о некоторых проблемах с заменой маркеров, но похоже, что это было исправлено несколько лет назад.
Вы также должны проверить, что indent-line-function
имеет правильное значение, а именно LaTeX-indent-line
.
Вы можете добавить некоторые sit-for
к определению yas/indent-according-to-mode
, чтобы увидеть, где находится точка на разных этапах. Например, поместите следующее в «чистый» буфер, поместите курсор после его конца и введите C-x C-e
. Затем вставьте свой фрагмент как обычно, и он будет останавливаться на 1 секунду каждый раз, когда в коде вы видите (sit-for 1)
. Таким образом, если курсор начинается не в том месте, то вы знаете, что проблема возникает перед отступом и т. Д. Вам придется просматривать его для каждой строки с отступом, поэтому вы можете отключить отступ за исключением проблемной строки с помощью $>
. Добавление или удаление sit-for
позволит вам сузить его.
(defun yas/indent-according-to-mode (snippet-markers)
"Indent current line according to mode, preserving
SNIPPET-MARKERS."
(sit-for 1)
(goto-char (yas/real-line-beginning))
(sit-for 1)
(let ((trouble-markers (remove-if-not #'(lambda (marker)
(= marker (point)))
snippet-markers)))
(save-restriction
(widen)
(sit-for 1)
(condition-case err
(indent-according-to-mode)
(error (message "[yas] warning: yas/indent-according-to-mode habing problems running %s" indent-line-function)
nil)))
(sit-for 1)
(mapc #'(lambda (marker)
(set-marker marker (point)))
trouble-markers)))