VSCode代码片段扩展能否识别已写文本以避免重复?
VSCode代码片段识别已有文本避免重复生成的实现方法
可以实现,核心是利用VSCode代码片段的文本替换变量和正则匹配功能,针对不同场景编写对应的片段规则,就能识别已存在的内容并只补全缺失部分。
场景1:补全System.out到已有的.println(num);前
假设你已经写了.println(num);,光标在圆点左侧,想要补全前面的System.out,可以创建这样的代码片段:
{ "补全System.out前缀": { "prefix": "sout", // 触发前缀,可自定义 "body": [ "${TM_CURRENT_LINE/^(.*?)\\.(println\\(.*?\\);)$/$1System.out.$2/}" ], "description": "给已有的.println语句补全System.out前缀" } }
规则解释:
${TM_CURRENT_LINE}代表当前光标所在的整行文本- 正则
^(.*?)\\.(println\\(.*?\\);)$会捕获两部分内容:$1:光标到圆点前的所有内容(这里是空,因为光标在圆点左侧)$2:已存在的.println(num);部分
- 替换后就是
$1 + System.out + $2,最终得到System.out.println(num);,不会重复已有的部分。
场景2:在已有的""前插入文本,不重复引号
如果已经写了check that page contains "",光标在左侧引号前,想要插入string with parameters而不重复引号,对应的代码片段如下:
{ "插入参数字符串": { "prefix": "paramstr", // 触发前缀,可自定义 "body": [ "${TM_CURRENT_LINE/^(.*?)\"\"$/$1string with parameters \"\"/}" ], "description": "在已有的双引号前插入指定字符串,避免重复引号" } }
规则解释:
- 正则
^(.*?)\"\"$捕获""之前的所有内容(即check that page contains)作为$1 - 替换后将
$1和string with parameters ""拼接,最终得到目标结果check that page contains string with parameters "",不会生成重复的""。
注意事项
- 正则表达式需要精准匹配已有的文本格式,确保能正确捕获要保留的内容
- 触发前缀可以根据自己的习惯自定义,避免和其他片段冲突
内容的提问来源于stack exchange,提问作者João Victor
相关产品推荐
相关产品推荐

