C++ 如何使用Yasnippet printf

C++ 如何使用Yasnippet printf,c++,emacs,yasnippet,C++,Emacs,Yasnippet,我最近观看了如何在Emacs中使用Yasnippet 有人能解释一下如何使用这个片段吗? 具体来说,if和string matchelisp条件/函数对该代码段的预期用途有何作用 这段代码可以在Yasnippetc++-mode>printf中找到 # -*- mode: snippet -*- # name: printf # key: printf # -- printf("${1:%s}\\n"${1:$(if (string-match "%" y

我最近观看了如何在Emacs中使用Yasnippet

有人能解释一下如何使用这个片段吗? 具体来说,
if
string match
elisp条件/函数对该代码段的预期用途有何作用

这段代码可以在Yasnippetc++-mode>printf中找到

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

因此,如果您能够正确地将其加载到模式中,它应该可以工作(对于我来说,有一些yasnippet模式无法正确加载——如果所有其他模式都失败,请在代码段文件本身中使用
M-x yas加载代码段缓冲区
,然后看看这是否有效。)

至于宏,第二个参数基本上是以包含“%”符号的第一个参数为条件的。如果是,则在结束引号后插入一个逗号,然后从正在编辑的字符串中点击tab键跳转到那里。如果它的任何位置都不包含%,则会将其删除。换言之:

如果在第一个参数(字符串)中键入“hello world”,但不包含%s,则会得到:

printf("hello world\n");
没有第二个值可填充。但是,如果添加%s,当您点击tab(我在此处键入光标)时,光标将位于
之后,以填充第二个:


$2
不是有条件的-它对
$1
参数没有影响。格式为
${:$(…)}
的字段以前面匹配
num
的字段为条件,
yas text
在计算包含的elisp时绑定到第一个
${1}
字段的值。因此,在这里,两个镜像字段(带有elisp代码)都以第一个
${1:“%s”}
为条件,如下所述。这个问题似乎过于宽泛。您是否可以提出更具体的问题,例如,如果
字符串匹配,如何使用
,或者您想知道的任何具体操作方法?请不要使用图像而不是代码。下面是一个例子。@JustCarty-我根据你的建议编辑了这个问题。你能重新开始这个问题吗?啊,这更有意义。这太棒了,非常感谢。
printf("hello %s\n", CURSORHERE));