Emacs 用列表中的条目替换yasnippet字段

Emacs 用列表中的条目替换yasnippet字段,emacs,Emacs,最近我偶然发现了一个问题,它要求一种“动态”创建和扩展代码段的方法。我还发现了问题作者创建的包,可能是他的问题的结果。我非常喜欢这个软件包,但我想得到扩展的功能。软件包允许执行以下操作: 您可以编写以下代码段: convert img$1.jpg-单色-调整大小50%-旋转180 img$1_mono.pdf 调用aya create,输入新行并调用aya expand:粘贴上述代码,您可以替换占位符($1,$2,…),就像对普通yasnippet一样 但是,这是一个很好的特性,如果您必须创建

最近我偶然发现了一个问题,它要求一种“动态”创建和扩展代码段的方法。我还发现了问题作者创建的包,可能是他的问题的结果。我非常喜欢这个软件包,但我想得到扩展的功能。软件包允许执行以下操作:

您可以编写以下代码段:

convert img$1.jpg-单色-调整大小50%-旋转180 img$1_mono.pdf
调用
aya create
,输入新行并调用
aya expand
:粘贴上述代码,您可以替换占位符(
$1
$2
,…),就像对普通yasnippet一样

但是,这是一个很好的特性,如果您必须创建代码段的多个副本并输入扩展字符串,那么就没有那么有趣了。传递用于展开占位符的列表(如果有多个占位符,则传递列表列表)会很好。假设我必须为文件调用上面的东西
img_1.jpg
img_9.jpg
,结果应该被调用
img_a_mono.jpg
img_k_mono.jpg
,这样就可以创建列表:

(setq foo list'('(123456789)'(a b c d e f g h i j k))
编写代码片段

convert img$1.jpg-单色-调整大小50%-旋转180 img$2_mono.pdf
并调用扩展函数,指定
foo list
作为参数。[当然可以通过
number sequence
之类的函数动态创建这些列表]

恐怕我对elips不够精通,无法自己编写此代码,但是,可能有人有此技能并了解此功能的使用。

我已经编写了另一个,现在可以完成您描述的工作。 相关的代码片段是:

m1\n10&convert img&s.jpg -monochrome -resize 50% -rotate 180 img&s_mono.pdf
它扩展到

convert img1.jpg -monochrome -resize 50% -rotate 180 img1_mono.pdf
convert img2.jpg -monochrome -resize 50% -rotate 180 img2_mono.pdf
convert img3.jpg -monochrome -resize 50% -rotate 180 img3_mono.pdf
convert img4.jpg -monochrome -resize 50% -rotate 180 img4_mono.pdf
convert img5.jpg -monochrome -resize 50% -rotate 180 img5_mono.pdf
convert img6.jpg -monochrome -resize 50% -rotate 180 img6_mono.pdf
convert img7.jpg -monochrome -resize 50% -rotate 180 img7_mono.pdf
convert img8.jpg -monochrome -resize 50% -rotate 180 img8_mono.pdf
convert img9.jpg -monochrome -resize 50% -rotate 180 img9_mono.pdf
convert img10.jpg -monochrome -resize 50% -rotate 180 img10_mono.pdf
语法如下:

m[<range start:=0>][<separator:= >]<range end>[lisp expr][&][format expr]
这是一个辅助变量。首先定义它(当然,使用
tiny
):

将此扩展到

(setq foo-list '(?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k))
下面是您如何使用它:

m1\n10listxnthxfoo-list&convert img&s.jpg -monochrome -resize 50% -rotate 180 img&c_mono.pdf
扩展将是

convert img1.jpg -monochrome -resize 50% -rotate 180 imga_mono.pdf
convert img2.jpg -monochrome -resize 50% -rotate 180 imgb_mono.pdf
convert img3.jpg -monochrome -resize 50% -rotate 180 imgc_mono.pdf
convert img4.jpg -monochrome -resize 50% -rotate 180 imgd_mono.pdf
convert img5.jpg -monochrome -resize 50% -rotate 180 imge_mono.pdf
convert img6.jpg -monochrome -resize 50% -rotate 180 imgf_mono.pdf
convert img7.jpg -monochrome -resize 50% -rotate 180 imgg_mono.pdf
convert img8.jpg -monochrome -resize 50% -rotate 180 imgh_mono.pdf
convert img9.jpg -monochrome -resize 50% -rotate 180 imgi_mono.pdf
convert img10.jpg -monochrome -resize 50% -rotate 180 imgj_mono.pdf

我很高兴你喜欢
自动yasnippet
。你的问题几乎可以用我的另一个软件包来处理:。我只需要稍微调整一下。很好,你提醒了我,我刚刚将StackOverflow问题导致的更改提交给了
自动yasnippet
。这非常好,解决了我作为前任发布的问题部分充足。您可能会注意到,我希望第二个文件具有字母编号。此外,尽管这确实解决了示例问题,但它不允许使用自定义的任意列表进行扩展,而只允许使用可由
tiny.el
生成的列表。然而,这是一个非常好的解决方案,我将添加t他对我这套工具的态度!:-)
m1\n10listxnthxfoo-list&convert img&s.jpg -monochrome -resize 50% -rotate 180 img&c_mono.pdf
convert img1.jpg -monochrome -resize 50% -rotate 180 imga_mono.pdf
convert img2.jpg -monochrome -resize 50% -rotate 180 imgb_mono.pdf
convert img3.jpg -monochrome -resize 50% -rotate 180 imgc_mono.pdf
convert img4.jpg -monochrome -resize 50% -rotate 180 imgd_mono.pdf
convert img5.jpg -monochrome -resize 50% -rotate 180 imge_mono.pdf
convert img6.jpg -monochrome -resize 50% -rotate 180 imgf_mono.pdf
convert img7.jpg -monochrome -resize 50% -rotate 180 imgg_mono.pdf
convert img8.jpg -monochrome -resize 50% -rotate 180 imgh_mono.pdf
convert img9.jpg -monochrome -resize 50% -rotate 180 imgi_mono.pdf
convert img10.jpg -monochrome -resize 50% -rotate 180 imgj_mono.pdf