最近我偶然发现了这个问题"A quick way to repeatedly enter a variable name in Emacs?"它需要一种“即时”创建和扩展片段的方法。我还找到了包裹auto-yasnippet这是由问题的作者创建的,可能是他的问题的结果。我非常喜欢这个包,但我希望获得扩展的功能。该包允许执行以下操作:
您编写以下代码片段:
convert img$1.jpg -monochrome -resize 50% -rotate 180 img$1_mono.pdf
调用aya-create
,输入新行并调用aya-expand
:上面的代码粘贴完毕,可以替换占位符($1
) code>, $2
, ...) 就像您对普通 yasnippet 所做的那样。
这是一个很棒的功能,但是,如果您必须创建代码段的许多副本并输入扩展字符串,那么它就变得不那么有趣了。最好传递一个用于扩展占位符的列表(如果有多个占位符,则为列表列表)。假设我必须将文件 img_1.jpg
调用到 img_9.jpg
,结果应该调用 img_a_mono.jpg
到 img_k_mono.jpg
,因此可以创建列表:
(setq foo-list '( '( 1 2 3 4 5 6 7 8 9 ) '( a b c d e f g h i j k ) )
编写代码片段
convert img$1.jpg -monochrome -resize 50% -rotate 180 img$2_mono.pdf
并调用扩展函数,指定foo-list
作为参数。 [当然,人们可以通过像 number-sequence
这样的函数动态创建这些列表]
我担心我对 elips 的掌握不够熟练,无法自己编写此代码,但是,也许有人有技能并看到了此功能的用途。
最佳答案
我又写了一篇package现在可以完成您所描述的工作。 相关片段是:
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]
x
是 elisp 表达式中的默认 var。需要一一进行
范围内所有数字的值。
&
表示 elisp expr 已结束,format expr 已开始。
如果只有一个,它可以用作格式 expr 的一部分。
键与 format
相同:我只是将 & 翻译为 %。
您可以在tiny.el
的评论部分找到更多片段。
UPD:expr 现在可以返回列表
根据您的建议,这是下一个改进。
这个没有辅助变量(96 是 (- ?a 1)
的值):
m1\n10listx+x96&convert img&s.jpg -monochrome -resize 50% -rotate 180 img&c_mono.pdf
这个带有辅助变量。首先定义它(当然使用tiny
:):
(setq foo-list '(m 10+x97&?&c))
将其扩展为
(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
关于emacs - 用列表中的条目替换 yasnippet 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18107568/