$CLIPBOARD 单独使用无效,必须嵌入占位符如 ${1:$CLIPBOARD} 才具备可编辑性、空值兜底和内容转换能力,否则会因为空值、换行或无法转换导致结构破坏或功能失效。

$CLIPBOARD 可以直接填入剪贴板内容,但默认不触发编辑、不处理空值、不兼容多行——必须配合占位符语法才能真正“可用”。
为什么 $CLIPBOARD 单独用基本等于没用
直接写 $CLIPBOARD 会原样插入剪贴板文本,但存在三个硬伤:
- 剪贴板为空时,插入空字符串,光标不会停留,用户无法补输
- 剪贴板含换行时,
$CLIPBOARD会破坏代码片段结构(JSON body 是字符串数组,不能跨行) - 无法对内容做任何转换,比如转大写、去空格、提取单词
必须用 ${1:$CLIPBOARD} 才算真正启用
把 $CLIPBOARD 包进带序号的占位符里,才能获得可编辑性与兜底能力:
-
${1:$CLIPBOARD}:剪贴板有内容就预填,为空则光标停在$1位置,允许手动输入 -
${1:$CLIPBOARD/([a-z]+)/${1:/upcase}/g}:先填剪贴板,再全局把小写字母转大写 -
${1:${CLIPBOARD/[ ]+/ /g}}:把换行替换成空格,避免破坏 JSON 结构
常见误用:想自动转命名规范却漏了捕获组
想把剪贴板里的 user_id 自动变成 UserId?下面这个写法是错的:
"const ${1:$CLIPBOARD} = () => {}"
正确做法是显式捕获并转换:
"const ${1:$CLIPBOARD/([a-z]+)_([a-z]+)/${1:/pascalcase}${2:/pascalcase}/} = () => {}"
注意:/pascalcase 修饰符只作用于单个捕获组,user_id 需拆成两组分别处理;若剪贴板是空或不匹配,仍会回退到可编辑的 $1。
真正可靠的剪贴板片段长这样
一个兼顾安全、可编辑、可转换的实用模板:
"log": {
"prefix": "logc",
"body": [
"console.log('${1:$CLIPBOARD/\s+/ /g}:', ${1:$CLIPBOARD});"
]
}
它做了三件事:
- 用
${1:$CLIPBOARD}确保光标可停留、内容可修改 - 第一个
$CLIPBOARD经过/\s+/ /g清理多余空白,用于日志标签(避免" user_id :") - 第二个
$CLIPBOARD直接作为变量名使用,不做清洗——因为 JS 变量名本身不允许空格
剪贴板内容不可控,所以所有依赖它的片段,都得默认它可能为空、含换行、含非法字符——这不是边缘情况,是常态。











