【发布时间】:2010-12-26 13:59:31
【问题描述】:
我一直在尝试利用 YASnippet 的一个很酷的特性:编写包含嵌入式 Emacs Lisp 代码的 sn-ps。 rst-mode 有一个 sn-p,它用“=”包围输入的文本,该文本与
中的文本一样长====
Text
====
基于这个sn-p,我决定稍微修改它(使用Elisp),以便它根据您所处的主要模式排除这三行(我认为这样的sn-p对组织很有用源代码)。所以我写了这个:
${1:`(insert comment-start)`} ${2:$(make-string (string-width text) ?\-)}
$1 ${2:Text}
$1 ${2:$(make-string (string-width text) ?\-)}
$0
这段代码运行得相对较好,除了一个问题:这三行的缩进混淆了,这取决于我所处的主要模式(例如,在 emacs-lisp-mode 中,第二行和第三行移动更多比第一行向右)。
我认为问题的根源可能与第一行字符串${1: 之后的内容有关。如果我添加一个字符,我没有问题(即所有三行在 sn-p 扩展的末尾都正确对齐)。如果我在此字符串后添加一个空格,则未对齐问题仍然存在。
所以我的问题是:你知道有什么方法可以重写这个 sn-p 以免出现这种错位吗?你知道这种行为的根源是什么吗?
干杯,
【问题讨论】:
标签: emacs elisp code-snippets