它适用于我的配置,但我怀疑它与自动缩进有关(我的配置是高度定制的,因此可能有所不同)。如果添加,您是否仍然看到问题
# 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)
。因此,如果光标从错误的位置开始,那么您就知道问题出现在缩进之前,等等。您将不得不为每一行缩进观察它,因此您可能希望关闭除有问题的行之外的缩进 via $>
。添加或删除sit-for
's 将允许您缩小范围。
(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)))