假设我有一个UltiSnips片段,该片段将用下划线替换所有特殊字符。

我有这个:

snippet us "replace specials with underscores" w
${1:${VISUAL}}
`!p
import re
snip.rv = re.sub("[^0-9a-zA-Z]", "_", t[1])
`
endsnippet


现在,类似Hello world!的内容变为:

Hello world!
Hello_World_


但是,最后,我只想保留第二行,并放弃我最初输入的内容。那可能吗?也许使用post_expand

最佳答案

您不需要编写任何python代码。您的代码段非常简单,如下所示:

snippet us "replace specials with underscores" w
${1:${VISUAL/[^0-9a-zA-Z]/_/g}}
endsnippet


以更一般的方式,我们能够通过snip.v.text属性检索在可视模式下选择的文本。因此,只需将t[1]更改为该名称,然后删除${1:${VISUAL}}

snippet us "replace specials with underscores" w
`!p
import re
snip.rv = re.sub("[^0-9a-zA-Z]", "_", snip.v.text)
`
endsnippet

10-02 23:05