You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Visual Studio Code扩展中禁用可选代码片段集?

解决VS Code扩展代码片段动态禁用问题

问题根源

你当前的写法不生效,是因为VS Code的snippets贡献点中,enabled字段仅支持静态布尔值(true/false),不支持${config:...}这种动态配置变量插值,所以直接引用配置项不会起作用。

可行方案

方案1:给单个代码片段添加when条件(简单直接)

  1. 先在扩展的package.json中定义配置项(如果还没加):
"contributes": {
  "configuration": {
    "title": "RwMH 扩展配置",
    "properties": {
      "RwMH.enableCompletions": {
        "type": "boolean",
        "default": true,
        "description": "启用XML代码补全片段"
      }
    }
  },
  "snippets": [
    {
      "language": "xml",
      "path": "./Snippets/Completions.jsonc"
    }
  ]
}
  1. 打开你的代码片段文件Completions.jsonc,给每个片段添加when条件,关联配置项:
{
  "XML 补全片段1": {
    "prefix": "xml-snippet-1",
    "body": ["<div>${1:content}</div>"],
    "description": "示例XML片段",
    "when": "config.RwMH.enableCompletions"
  },
  "XML 补全片段2": {
    "prefix": "xml-snippet-2",
    "body": ["<span>${1:text}</span>"],
    "description": "另一个XML片段",
    "when": "config.RwMH.enableCompletions"
  }
}

当用户将RwMH.enableCompletions设为false时,所有带该条件的片段会自动隐藏,不再触发补全。

方案2:动态注册/注销代码片段(适合大量片段)

如果你的代码片段数量很多,不想逐个添加when条件,可以通过扩展的激活逻辑动态控制片段加载:

  1. 移除package.json中静态的snippets贡献项。

  2. 在扩展的入口文件(如extension.js或extension.ts)中添加以下逻辑:

const vscode = require('vscode');
const fs = require('fs');
const path = require('path');

let snippetDisposable = null;

function activate(context) {
  // 定义更新代码片段的函数
  const updateSnippets = () => {
    // 获取当前配置
    const enableCompletions = vscode.workspace.getConfiguration('RwMH').get('enableCompletions');

    // 销毁已注册的片段(避免重复)
    if (snippetDisposable) {
      snippetDisposable.dispose();
      snippetDisposable = null;
    }

    // 若配置启用,则注册片段
    if (enableCompletions) {
      const snippetPath = path.join(context.extensionPath, './Snippets/Completions.jsonc');
      const snippets = JSON.parse(fs.readFileSync(snippetPath, 'utf8'));
      snippetDisposable = vscode.languages.registerSnippets('xml', snippets);
      context.subscriptions.push(snippetDisposable);
    }
  };

  // 初始化时执行一次
  updateSnippets();

  // 监听配置变化,实时更新
  context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(e => {
    if (e.affectsConfiguration('RwMH.enableCompletions')) {
      updateSnippets();
    }
  }));
}

function deactivate() {}

module.exports = { activate, deactivate };

这种方式会完全根据配置项的状态,决定是否加载整个代码片段文件,无需修改单个片段的定义。

内容的提问来源于stack exchange,提问作者Victor Pointer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:55:59