开发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
相关产品推荐
相关产品推荐

