首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$0后以%结束行的yasnippets在与AUCTeX一起使用时表现得很奇怪

$0后以%结束行的yasnippets在与AUCTeX一起使用时表现得很奇怪
EN

Stack Overflow用户
提问于 2011-11-09 18:10:49
回答 1查看 558关注 0票数 4

有百分比符号%的Yasnippet代码段以代码段的最后一点$0结束一行,在百分比符号之前执行奇怪的操作,因为光标被放在百分比符号之后而不是前面。我想知道如何才能避免这种奇怪的行为。

考虑以下片段:

代码语言:javascript
复制
# -*- mode: snippet -*-
# name: test snippet
# key: ts
# --
{
$0%
}

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

代码语言:javascript
复制
{
[cursor]%
}

但所发生的情况如下:

代码语言:javascript
复制
{
  % [cursor]
}

如何才能使代码片段按照我所认为的那样运行呢?

我的猜测是,这是由于在AUCTeX中发生了某些事情,因为它发生在AUCTeX激活时,而不是在主要模式Lisp交互中。

EN

回答 1

Stack Overflow用户

发布于 2011-11-14 18:20:37

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

代码语言:javascript
复制
# expand-env: ((yas/indent-line 'fixed))

代码语言:javascript
复制
# 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秒。因此,如果光标从错误的位置开始,那么您就知道问题在缩进之前,等等。您必须查看每一行缩进,因此您可能希望关闭缩进,但通过$>的有问题的行除外。添加或删除sit-for将允许您缩小范围。

代码语言:javascript
复制
(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)))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8069537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档