首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将yasnippet字段替换为列表中的条目

将yasnippet字段替换为列表中的条目
EN

Stack Overflow用户
提问于 2013-08-07 15:32:19
回答 1查看 272关注 0票数 2

最近,我偶然发现了一个问题“在Emacs中反复输入变量名的快速方法是什么?”,它要求一种方法来创建和扩展片段“在飞行中”。我还找到了自吹自擂包,它是由问题的作者创建的,可能是他的问题的结果。我非常喜欢这个包,但是我想得到扩展的功能。该包允许执行以下操作:

您可以编写以下代码片段:

代码语言:javascript
复制
convert img$1.jpg -monochrome -resize 50% -rotate 180 img$1_mono.pdf

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

这是一个很好的特性,但是,如果您必须创建--许多片段的副本并输入扩展字符串--它就变得不那么有趣了。最好传递一个列表(如果有多个占位符,则传递列表列表),这些列表用于展开占位符。让我说,对于img_1.jpgimg_9.jpg的文件,我必须调用上面的内容,结果应该称为img_a_mono.jpgimg_k_mono.jpg,这样就可以创建列表了:

代码语言:javascript
复制
(setq foo-list '( '( 1 2 3 4 5 6 7 8 9 ) '( a b c d e f g h i j k ) )

写片段

代码语言:javascript
复制
convert img$1.jpg -monochrome -resize 50% -rotate 180 img$2_mono.pdf

并调用扩展函数,指定foo-list作为参数。当然,您可以通过像number-sequence这样的函数动态创建这些列表。

恐怕我对elips还不够精通,无法自己编写代码,不过,也许有人掌握了这方面的技能,并且看到了这个特性的使用情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-07 16:14:29

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

代码语言:javascript
复制
m1\n10&convert img&s.jpg -monochrome -resize 50% -rotate 180 img&s_mono.pdf

它扩展到

代码语言:javascript
复制
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

语法如下:

代码语言:javascript
复制
m[<range start:=0>][<separator:= >]<range end>[lisp expr][&][format expr]

x是elisp表达式中的默认变量。它将一个一个地取范围内所有数字的值。

&意味着elisp已经结束,格式expr已经开始。如果只有一个,它可以作为expr格式的一部分使用。键与format的键相同:我只是翻译& to %。

您可以在tiny.el的注释部分找到更多的片段。

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

按照你的建议,这是下一个改进。这个变量没有辅助变量(96是(- ?a 1)的值):

代码语言:javascript
复制
m1\n10listx+x96&convert img&s.jpg -monochrome -resize 50% -rotate 180 img&c_mono.pdf

这个是带辅助变量的。首先定义它(当然,使用tiny:):

代码语言:javascript
复制
(setq foo-list '(m 10+x97&?&c))

把这个扩展到

代码语言:javascript
复制
(setq foo-list '(?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k))

下面是你如何使用它:

代码语言:javascript
复制
m1\n10listxnthxfoo-list&convert img&s.jpg -monochrome -resize 50% -rotate 180 img&c_mono.pdf

扩张将是

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18107568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档