有百分号的 Yasnippet 片段,%
,以片段的最后一个点结束一行,$0
,在百分号表现奇怪之前,光标被放置在百分号之后而不是之前。我想知道如何才能避免这种奇怪的行为。
考虑以下片段:
# -*- mode: snippet -*-
# name: test snippet
# key: ts
# --
{
$0%
}
我认为它已被激活should在第一行包含的位置插入三行{
,最后一行}
和第二行%
并将光标置于之前%
在第二行,如下例所示:
{
[cursor]%
}
但发生的情况如下:
{
% [cursor]
}
我怎样才能使代码片段的行为符合我的预期?
我的猜测是,这是由于 AUCTeX 中的某些原因造成的,因为它发生在 AUCTeX 激活的情况下,但不是在主要模式 Lisp Interaction 中。
它适用于我的配置,但我怀疑它与自动缩进有关(我的配置是经过大量定制的,因此可能有所不同)。如果您添加,您是否仍然看到问题
# expand-env: ((yas/indent-line 'fixed))
or
# 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)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)