我正在编写一个片段(用于 Go)并且希望在我移动到下一个字段时有条件地转换一个字段。具体来说,如果我保持未编辑状态,我希望该字段为空,如果我保持编辑状态,则将其括在括号中。
我不成功的片段,表达了我想要的但未能转换已编辑的字段:
func ${1:$$(when (and yas-modified-p yas-moving-away-p)
(concat "(" yas-text ")"))} FuncName
Run Code Online (Sandbox Code Playgroud)
我想要的是,t Type在该字段中键入时,代码段将扩展为:
func (t Type) FuncName
Run Code Online (Sandbox Code Playgroud)
当跳过未编辑的字段时,它会像这样展开:
func FuncName
Run Code Online (Sandbox Code Playgroud)
我知道条件按预期执行,因为如果我更改(concat ...)为(message "XXX"),我会看到打印在迷你缓冲区中的跟踪,但我不知道为什么我的转换不起作用。
在您的示例中,在我看来,连接字符串的结果被丢弃。我认为您需要实际将新字符串插入缓冲区。
我对 yasnippet 语法不太熟悉,所以这可能不是最干净的解决方案,但以下内容似乎对我有用:
func ${1:$$(when (and yas-modified-p
yas-moving-away-p)
(insert ")" )
(backward-char (+ 1 (length yas-text)))
(insert "("))} ${2:funcName} {
$0
}
Run Code Online (Sandbox Code Playgroud)