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

开发VSCode自动补全扩展时如何获取光标前的所有文本

实现方法

你可以通过VS Code API提供的Selection和Range能力实现需求,具体逻辑如下:

  • 通过activeTextEditor.selection.active获取当前光标所在的精确位置
  • 构造一个从文档起始位置到光标位置的Range对象,传入getText()方法即可获取光标之前的全部文本

完整示例代码

const vscode = require('vscode');

function getTextBeforeCursor() {
    const editor = vscode.window.activeTextEditor;
    // 判空处理,避免无激活编辑器时报错
    if (!editor) {
        return '';
    }
    // 获取当前光标位置
    const cursorPosition = editor.selection.active;
    // 构造从文档开头到光标位置的范围
    const rangeBeforeCursor = new vscode.Range(
        new vscode.Position(0, 0), // 文档起始位置
        cursorPosition // 光标当前位置
    );
    // 获取范围内的文本
    return editor.document.getText(rangeBeforeCursor);
}

额外说明

  • 如果存在多个光标,editor.selections会返回所有光标位置的数组,你可以遍历数组分别获取每个光标之前的文本
  • 如果你只需要获取光标所在行的光标前文本,不需要整个文档的内容,可以按如下方式修改Range构造逻辑:
// 仅获取当前行光标前的文本
const lineRangeBeforeCursor = new vscode.Range(
    cursorPosition.line, 0,
    cursorPosition.line, cursorPosition.character
);
const lineTextBeforeCursor = editor.document.getText(lineRangeBeforeCursor);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:51:02