最近,我偶然发现了"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
,$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
]
我担心自己对自己的编码不够熟练,但是,也许有人掌握了这些技能,并且看到了这个功能的使用。
答案 0 :(得分:2)
我写了另一个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已经结束,格式expr已经开始。
如果只有一个,它可以用作格式expr的一部分。
密钥与format
的密钥相同:我只是翻译&amp;到%。
您可以在tiny.el
的评论部分找到更多摘要。
根据您的建议,这是下一步的改进。
这一个没有辅助变量(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