#typescript #visual-studio-code #vscode-extensions
Вопрос:
Я работаю над расширением автозаполнения для VSCode, и мне нужен весь текст файла пользователей перед курсором. Я знаю, что мы можем получить весь текст в файле, используя:
var editor = vscode.window.activeTextEditor;
var text= editor.document.getText();
Но я не понимаю, как я могу определить положение курсора и получить текст перед ним?
Ответ №1:
const editor = vscode.window.activeTextEditor;
const cursorPosition = editor.selection.active; // a vscode.Position
// for text on line up to cursor
// const lineText = editor.document.lineAt(cursorPosition.line).text;
// const textBeforeCursor = lineText.substring(0, cursorPosition.character);
// for text in the file up to cursor
const fileTextToCursor = editor.document.getText(new vscode.Range(0, 0, cursorPosition.line, cursorPosition.character));
Для текста в файле до курсора:
getText()
принимает значение a vscode.Range
, которое может быть построено на основе положения курсора. Просто используйте 0,0
в качестве начальной точки/позиции, а положение курсора-в качестве точки остановки.
Для текста в строке до курсора:
Вы получаете положение курсора из выделения. Эта переменная обладает line
свойством, которое вы можете использовать для получения текста этой строки.
А затем строковая операция substring
для получения текста перед курсором. cursorPosition.character
возвращает число для положения курсора в столбце в строке.
[Если бы у вас было несколько курсоров, вам пришлось бы изменить это. Этот код работает для основного курсора в файле. Это было бы легко изменить — добавьте цикл по всем выборкам.]
Комментарии:
1. Спасибо, но это дает мне только текст одной строки. Это означает, что он дает мне текст от начала строки до положения курсора. Можно ли это изменить, чтобы включить и предыдущие строки?
2. Да, легко, я добавлю к ответу. На самом деле это проще.
3. Спасибо, теперь работает 🙂