在与AUCTeX一起使用时,$ 0之后行为%的yasnippets行为很奇怪

时间:2011-11-09 18:10:50

标签: emacs code-snippets auctex

Yasnippet片段有一个百分号,%,结束了与片段最后一个点$0的一行,在百分号符号行为奇怪之前,光标放在百分号后面而不是在它之前。我想知道如何避免这种奇怪的行为。

请考虑以下代码段:

# -*- mode: snippet -*-
# name: test snippet
# key: ts
# --
{
$0%
}

我认为,当它被激活时,应该插入三行,其中第一行包含{,最后一行}和第二行%和将光标放在%之前的第二行,如下例所示:

{
[cursor]%
}

但是会发生以下情况:

{
  % [cursor]
}

我怎样才能使代码片段符合我的想法呢?

我的猜测是,这是由AUCTeX中的某些东西引起的,因为它发生在AUCTeX激活但不在主模式Lisp Interaction中。

1 个答案:

答案 0 :(得分:2)

它适用于我的配置,但我怀疑它与自动缩进有关(我的是大量定制的,这可能是不同的)。如果添加

,您仍然会看到问题吗?
# 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。然后像往常一样插入您的代码段,它会在您看到(sit-for 1)的代码中的每个位置暂停1秒钟。因此,如果光标在错误的位置开始,那么你知道问题是在缩进之前等等。你必须为每个缩进的行观察它,所以你可能希望关闭缩进除了有问题的行通过{ {1}}。添加或删除$>将允许您缩小范围。

sit-for