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

标签 emacs

最近我偶然发现了这个问题"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.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 的掌握不够熟练,无法自己编写此代码,但是,也许有人有技能并看到了此功能的用途。

最佳答案

我又写了一篇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/

相关文章:

emacs - 使用带有 EmacsW32 和 cygwin 的tramp,可能吗?

assembly - 是否有为z/assembler量身定制的emacs组织模式的变体?

shell - 如何在 Emacs shell 缓冲区中获得对 '✖' 等的支持?

Emacs + Cider (Clojure) + 自动完成 : How to get the docstring?

emacs - 我可以通过单击 emacs 中的 linum 列来选择文本吗?

Emacs C 模式自动缩进在预处理器宏后失败

file - Emacs-Lisp 中的异步复制文件和复制目录?

Emacs 字体锁定模式 : provide a custom color instead of a face

linux - Linux 有没有好的 "OCaml Browser"工具?

Emacs 如何获得复制粘贴、移动箭头文本突出显示等