fal*_*sum 5 emacs elisp code-snippets
我一直在尝试使用YASnippet的一个很酷的功能:编写包含嵌入式Emacs Lisp代码的片段.有一个rst模式的片段,用"="围绕输入的文本,这与文本一样长
====
Text
====
基于这个片段,我决定稍微修改它(使用Elisp),以便根据您所处的主要模式注释掉这三行(我认为这样的片段对于组织源代码很有用).所以我写了这个:
${1:`(insert comment-start)`} ${2:$(make-string (string-width text) ?\-)}
$1 ${2:Text}
$1 ${2:$(make-string (string-width text) ?\-)}
$0
Run Code Online (Sandbox Code Playgroud)
除了一个问题之外,这段代码工作得相当好:这三行的缩进混合起来,这取决于我所处的主要模式(例如,在emacs-lisp模式中,第二行和第三行向右移动更多比第一行).
我认为问题的根源可能与${1:第一行上的字符串后面的内容有关.如果我添加一个字符,我没有问题(即,在片段扩展结束时所有三行都正确对齐).如果我在此字符串后面添加一个空格,则错位问题仍然存在.
所以我的问题是:你知道有什么方法可以重写这个片段,以免产生这种错位吗?你知道这种行为的来源是什么吗?
干杯,
来自写作片段:
yas/缩进线
变量 yas/indent-line 控制缩进。默认情况下它绑定到“auto”,这会导致您的代码片段根据插入的缓冲区的模式进行缩进。
另一个变量 yas/also-auto-indent-first-line,当非 nil 时正是这样做的:-)。
要在代码片段模板中使用硬编码缩进,请将此变量设置为固定。
要控制每个代码段的缩进,另请参阅编写代码段中的 #expand-env: 指令。
为了向后兼容早期版本的 YASnippet,您还可以在代码片段中放置 $> ,将在那里执行 (indent-according-to-mode) 来缩进该行。仅当 yas/indent-line 设置为“auto”以外的其他值时,此操作才会生效。
for (${int i = 0}; ${i < 10}; ${++i})
{$>
$0$>
}$>
Run Code Online (Sandbox Code Playgroud)