Получить весь текст перед курсором в редакторе VSCode

#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. Спасибо, теперь работает 🙂