如何使用 Yasnippet printf

How to use Yasnippet printf

我最近看了 this fantastic video 如何在 Emacs 中使用 Yasnippet。

有人可以解释一下如何使用这个片段吗?

具体而言,ifstring-match elisp conditionals/functions 就此代码段的预期用途做了什么?

此片段可在 Yasnippet c++-mode > printf.

中找到
# -*- mode: snippet -*-
# name: printf
# key: printf
# --
printf("${1:%s}\n"${1:$(if (string-match "%" yas-text) ", " "\);")
}${1:$(if (string-match "%" yas-text) "\);" "")}

因此,如果您可以将其正确加载到模式中,它应该可以工作(有一些 yasnippet 模式无法为我正确加载——如果所有其他方法都失败了,在片段文件本身中使用 M-x yas-load-snippet-buffer看看是否可行。)

至于宏,第二个参数基本上以包含“%”符号的第一个参数为条件。如果是,则在结束引号后插入一个逗号,然后您跳到那里,点击您正在编辑的字符串中的制表符。如果其中任何地方都不包含 %,则将其删除。换句话说:

如果您在第一个参数(字符串)中键入没有 %s 的“hello world”,您会得到:

printf("hello world\n");

没有要填写的第二个值。但是,如果您添加 %s,当您点击 Tab 时(我在其中键入 CURSORHERE ):

printf("hello %s\n", CURSORHERE));