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

2023-12-14

有百分号的 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(使用前将#替换为@)

与 AUCTeX 一起使用时,在 $0 之后以 % 结束行的 yasnippets 行为很奇怪 的相关文章

随机推荐

  • Sparql 使用变量绑定计数结果

    有什么办法可以bind的结果count到一个变量 我尝试了以下方法 不起作用 SELECT totalSubject WHERE s p o BIND COUNT s AS totalSubject COUNT is an 总计的函数 只能
  • 睡眠/等待,不消耗CPU

    所以我正在将这个智能手机应用程序模拟到 Windows 这是一个运行其逻辑并绘制方法的游戏1 60速度 以毫秒为单位 这是16 6667 我已经实现了这个游戏循环 private const double UPDATE RATE 1000d
  • clusterExport到R并行中的单线程

    我想分割一个大的data frame分成块并将每个块单独传递给集群的不同成员 就像是 library parallel cl lt makeCluster detectCores for i in 1 detectCores cluster
  • iOS 13 Beta 版本中的应用程序启动时应用程序崩溃

    这是崩溃报告 崩溃仅发生在 iOS 13 beta 版本上 Crashed com apple main thread 0 libsystem pthread dylib 0x1ae056484 pthread get qos class
  • SwiftUI 列表正在使用 .navigationBarItems 进行剪辑[重复]

    这个问题在这里已经有答案了 When I add navigationBarItems modifier list is clipping and doesn t take all space like this It should be
  • Google plus API 可像 Facebook 一样在墙上发布

    我一直在谷歌上搜索教程 以便在谷歌加上发布一些文本 但好像没有 我还尝试浏览谷歌为 mac 和 iPhone 开发人员提供的文档 但找不到任何可以解决我的问题的内容 此外 关于如何让用户登录 google plus 帐户的信息也很少 我不确
  • object-fit 如何与 canvas 元素配合使用?

    我一直无法找到任何文档来告诉我一种或另一种方式 我可以在画布元素上使用适合对象的封面吗 我做了一些实验 但它的表现并不符合预期 有人能给我一个明确的答案吗 object fit1 will only have an effect when
  • 为什么我会收到此 NullPointer 异常?

    两个表 一个的主键是另一个的外键 旧数据库 我使用双向一对一映射 Entity public class First Id protected int a OneToOne mappedBy first cascade CascadeTyp
  • 将 Microsoft Office Communicator 2007 集成到 ASP.NET 页面中

    我正在为我公司的 Intranet 使用 ASP NET 和 C 构建网站 那么是否可以将 Microsoft Office Communicator 2007 集成到 ASP NET Page 中 即该网站应该能够提供所有联系人的当前状态
  • PyQt4 - “运行时错误:底层 C/C 对象已被删除”

    我不断收到此运行时错误 我不知道如何修复 这就是我想要实现的目标 当我单击 QTreeView 中的不同项目时 我想用值动态更新此 QTableWidget 在大多数情况下 我的代码可以工作 除非我单击第二个项目并且我需要更新我的 QTab
  • 缓存sql数据库的结果,还是每次查询?

    我正在根据 sql 查询生成页面 这是查询 CREATEPROCEDURE sp searchUsersByFirstLetter searchQuery nvarchar 1 AS BEGIN SET NOCOUNT ON SELECT
  • 以编程方式自动静音 Android 手机的音量?

    我正在开发一个可以自动关闭 Android 手机声音的应用程序 如何检测声音的音量并以编程方式将其关闭 if hour myTime getHour minute myTime getMinute if Settings getSetMyT
  • Twilio环境变量错误

    Twilio Python如果我将 account sid 和 auth token 直接放入代码中 则工作正常 但当我将它们设置为环境变量时 则无法工作 我正在使用 PyCharm 并通过编辑配置 gt 环境变量来设置它们 就像我过去对其
  • 如何根据生效日期获取当前记录?

    如何根据生效日期获取当前记录 我应该使用子查询吗 除了 MAX 之外还有什么可以使用的吗 我有这些表格示例 ResourceID is the ID number of the Resource OrganizationId is the
  • ios 7 中的解密无法使用 aes

    在我的应用程序中 我从 xml 获取数据 数据已加密 我需要解密收到的 nsstring UserName QEjbHvzPjk YuLDVPUJuEA 我需要将此 nsstring 解密为常规格式 我搜索并找到 aes 但它没有进行任何更
  • C# 中的 ArrayList 与 List<>

    有什么区别ArrayList and List lt gt in C 难道仅此而已List lt gt 有一个类型 而ArrayList不是吗 是的 差不多 List
  • preg_replace 屏蔽电话号码的部分内容

    好吧 在重新阅读我之前寻求帮助的帖子后 我发现我没有完全清楚地说明我想要做什么 也没有指出原因 我正在忙于开发一个网站 该网站可能会显示人们留下电话号码的消息 尽管这很愚蠢 我需要负责并确保在这种情况下号码被屏蔽 首先 我需要搜索存储在变量
  • Azure Devops yaml管道if else条件与变量

    我正在尝试将 Azure Devops yaml 管道中的 if else 条件与变量组一起使用 我正在尝试按照最新的 Azure Devops yaml 管道构建来实现它 以下是我的场景中 if else 条件的示例代码 test 是 m
  • int * & 有实际意义吗?

    我在大学里找了一些关于 C 的练习 我发现了这个练习 include
  • 与 AUCTeX 一起使用时,在 $0 之后以 % 结束行的 yasnippets 行为很奇怪

    有百分号的 Yasnippet 片段 以片段的最后一个点结束一行 0 在百分号表现奇怪之前 光标被放置在百分号之后而不是之前 我想知道如何才能避免这种奇怪的行为 考虑以下片段 mode snippet name test snippet k