首页 > 解决方案 > VS Code 函数转到下一个空间

问题描述

我正在尝试编写一个函数,它将从光标转到下一个空间。这是我到目前为止所拥有的,但我不知道如何从当前光标位置进行搜索:

// 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但我根本找不到它引用如何使用正则表达式的位置。

来自 Matt 的反馈后的 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
   );
}

标签: javascriptvisual-studio-codevscode-extensions

解决方案


尝试将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)

这应该确保您只在光标位置之后找到匹配项


推荐阅读