2

最近我偶然发现了一个问题“在 Emacs 中重复输入变量名的快速方法?” 它要求一种“即时”创建和扩展片段的方法。我还发现了问题作者创建的包auto-yasnippet,可能是他的问题的结果。我非常喜欢这个包,但我想获得扩展的功能。该软件包允许执行以下操作:

您编写以下代码段:

convert img$1.jpg -monochrome -resize 50% -rotate 180 img$1_mono.pdf

call aya-create,输入新行并调用aya-expand: 上面的代码已粘贴,您可以像替换普通的 yasnippet 一样 替换占位符 ( $1, , ...)。$2

这是一个很棒的功能,但是,如果您必须创建片段的许多副本并输入扩展字符串,它就变得不那么有趣了。最好传递一个用于扩展占位符的列表(或列表列表,如果您有多个占位符)。假设我必须为文件调用上述内容,img_1.jpg结果img_9.jpg应该调用img_a_mono.jpgimg_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 不够精通,无法自己编写代码,但是,也许有人有技能并看到了此功能的用途。

4

1 回答 1

2

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

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 格式的一部分。键与 for 相同format:我只是将 & 转换为 %。

您可以在 的评论部分找到更多片段tiny.el

UPD:expr 现在可以返回一个列表

根据您的建议,这是下一个改进。这个没有辅助 var(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
于 2013-08-07T16:14:29.970 回答