Функция VS Code для перехода в следующий пробел - PullRequest
1 голос
/ 12 июля 2019

Я пытаюсь написать функцию, которая будет переходить на следующий пробел от курсора.Это то, что я до сих пор, но я не мог понять, как искать с текущей позиции курсора:

// go to next space
function goToNextSpace(args) {
   const vscode = args.require('vscode');
   const regEx = /\s/;
   const ACTIVE_EDITOR = vscode.window.activeTextEditor;
   const text = ACTIVE_EDITOR.document.getText();
   const match = regEx.exec(text);
   const nextPos = ACTIVE_EDITOR.document.positionAt(match.index);

   return ACTIVE_EDITOR.selection = new vscode.Selection(
      nextPos, nextPos
   );
}

Я смотрел на https://code.visualstudio.com/api/references/vscode-api, но я просто не мог найтигде он ссылается на то, как использовать регулярные выражения.

V2 после обратной связи с Мэттом

Благодаря @MattBierner у меня теперь есть следующий код.Я добавил 1 к индексу, чтобы каждый раз, когда я его вызываю, он переходил к следующему пробелу (а не просто оставался на последнем найденном месте).Теперь я упускаю способ перейти к следующему пробелу в следующей строке, если в конце строки.

// go to next space
function goToNextSpace(args) {
   const vscode = args.require('vscode');
   const ACTIVE_EDITOR = vscode.window.activeTextEditor;
   const text = ACTIVE_EDITOR.document.getText();

   const regEx = /\s/g;
   regEx.lastIndex = ACTIVE_EDITOR.document.offsetAt(ACTIVE_EDITOR.selection.active) + 1;
   const match = regEx.exec(text);

   const nextPos = ACTIVE_EDITOR.document.positionAt(match.index);

   return ACTIVE_EDITOR.selection = new vscode.Selection(
      nextPos, nextPos
   );
}

1 Ответ

1 голос
/ 12 июля 2019

Попробуйте установить свойство lastIndex в регулярном выражении в текущую позицию курсора (ACTIVE_EDITOR.selection.active):

 // You also need to enable global matching mode on your regular expression
 const regEx = /\s/g;

 regEx.lastIndex = ACTIVE_EDITOR.document.offsetAt(ACTIVE_EDITOR.selection.active)

Это должно гарантировать, что вы найдете совпадения только после позиции курсора

...