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

如何通过VSCode Extension API获取高亮文本(非选中文本)

获取VSCode中语法高亮文本的方案

要获取VSCode里像HTML标签这类被语法着色的高亮文本(而非选中的文本),VSCode扩展API没有直接的方法,但可以通过解析文档的Token来实现——语法高亮本质是基于Token的作用域(scope)来应用样式的,所以我们可以通过获取Token并筛选有作用域的内容来得到目标文本。

实现步骤

  • 获取当前激活的文本编辑器实例
  • 获取文档的全部Token信息
  • 遍历Token,筛选出带有语法作用域的条目,提取对应的文本内容

代码示例

import * as vscode from 'vscode';

export function retrieveHighlightedSyntaxText() {
    const activeEditor = vscode.window.activeTextEditor;
    if (!activeEditor) {
        vscode.window.showErrorMessage('当前没有激活的编辑器');
        return;
    }

    const targetDoc = activeEditor.document;
    // 获取整个文档的Token集合
    const docTokens = vscode.languages.getFullTextTokens(targetDoc);

    const highlightedSegments: { content: string; scopes: string[] }[] = [];

    docTokens.forEach(token => {
        // 仅收集带有语法作用域(即被高亮)的文本片段
        if (token.scopes.length > 0) {
            const segmentText = targetDoc.getText(new vscode.Range(token.start, token.end));
            highlightedSegments.push({ content: segmentText, scopes: token.scopes });
        }
    });

    // 可根据需求处理或返回高亮文本片段
    console.log('语法高亮文本片段:', highlightedSegments);
    return highlightedSegments;
}

说明

  • token.scopes对应的是语法高亮的作用域标识,比如meta.tag.html对应HTML标签、string.quoted.double.html对应HTML中的双引号字符串,通过这些标识可以精准筛选特定类型的高亮文本
  • 如果只需要获取文档某一范围内的高亮文本,可使用vscode.languages.getTokensAtPosition结合指定范围来替代getFullTextTokens

内容的提问来源于stack exchange,提问作者Joel Almeida

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:54:26