gpt4 book ai didi

emacs - 编写包含 Emacs Lisp 代码的片段时出现问题

转载 作者:行者123 更新时间:2023-12-04 21:25:16 26 4
gpt4 key购买 nike

我一直在尝试利用 YASnippet 的一个很酷的功能:编写包含嵌入式 Emacs Lisp 代码的片段。有一个 rst-mode 的片段,它用“=”包围输入的文本,它与文本一样长,例如
====Text====
基于这个片段,我决定稍微修改它(使用 Elisp),以便它根据您所处的主要模式注释掉这三行(我认为这样的片段对于组织源代码很有用)。所以我写了这个:

${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: 后面的内容有关。在第一行。如果我添加一个字符,我没有问题(即,所有三行都在代码段扩展的末尾正确对齐)。如果我在这个字符串后添加一个空格,错位问题仍然存在。

所以我的问题是:你知道有什么方法可以重写这个片段,这样就不会出现这种错位吗?你知道这种行为的根源是什么吗?

干杯,

最佳答案

来自 Writing snippets :

yas/indent-line

The variable yas/indent-line controls the indenting. It is bound to 'auto by default, which causes your snippet to be indented according to the mode of the buffer it was inserted in.

Another variable yas/also-auto-indent-first-line, when non-nil does exactly that :-).

To use the hard-coded indentation in your snippet template, set this variable to fixed.

To control indentation on a per-snippet basis, see also the directive # expand-env: in Writing Snippets.

For backward compatibility with earlier versions of YASnippet, you can also place a $> in your snippet, an (indent-according-to-mode) will be executed there to indent the line. This only takes effect when yas/indent-line is set to something other than 'auto.


for (${int i = 0}; ${i < 10}; ${++i})
{$>
$0$>
}$>

关于emacs - 编写包含 Emacs Lisp 代码的片段时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4534061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com