【问题标题】:vscode select first occurring string from cursorvscode 从光标中选择第一个出现的字符串
【发布时间】:2020-03-18 23:06:01
【问题描述】:

有没有办法选择下一个最字符串的单词[s]边界。如果需要,我会同意延期。当然,这需要依赖于语言语法。

例如:

  co▮nst a = "a is a const";

假设光标在 const 中的 'o' 之后,但这并不重要,是否有键盘快捷键或启用、导航(和选择)下一个不带分隔符的字符串内容的方法; a is a const 在这个例子中。

这些是我唯一能找到的,但是 vscode 对某些设置有一些奇怪的命名约定。我还尝试搜索“导航”。


编辑

在使用 SelectBy 时,我决定为常见的 Web 开发字符串分隔符选择以下内容:

"SelectString": {
    "forward": "(?<!\\\\)(['\"`])",
    "forwardNext": "(?<!\\\\){{1}})",
    "forwardInclude": false,
    "forwardNextInclude": false,
}

{
    "command": "selectby.regex",
    "when": "editorTextFocus && !editorHasSelection"
}

考虑转义字符,但是,免责声明,如果您的光标当前位于字符串中并且您激活它,它将找到一个嵌套字符串,当然前提是它在那里。

此外,我决定将!editorHasSelection 添加到 when 子句,否则它将考虑当前选择的结束分隔符,即新的开始。但这也是他们自己的事情。

【问题讨论】:

  • 您可以使用marketplace.visualstudio.com/items?itemName=rioj7.select-by基于正则表达式移动光标,只需搜索可以启动字符串、单引号、双引号和三重变体的不同方式(Python)
  • 感谢@rioV8 尝试了它,但它的行为并不符合我的预期,至少我无法做到。它根据正则表达式选择光标位置之前或之后的所有内容。我期待它“跳转”到字符串的开头(a)选择它的内容直到结束分隔符。我想从技术上讲,您可以先move 然后选择它,但这需要连续按下 2 个键来执行 1 个操作,希望避免这种情况。谢谢,虽然我会继续寻找更多的扩展
  • 我会看看我是否可以修改扩展以包含这种类型的选择,我没有抓住 select 部分

标签: visual-studio-code


【解决方案1】:

如果您使用Select By v0.7.0,您可以使用以下设置选择下一个字符串

    "selectby.regexes": {
      "stringContent": {
        "forward": "('''|\"\"\"|'|\")",
        "forwardNext": "{{1}}",
        "forwardInclude": false,
        "forwardNextInclude": false
      }
    }

定义一个键绑定:

  {
    "key": "ctrl+shift+alt+f10",
    "when": "editorTextFocus",
    "command": "selectby.regex",
    "args": ["stringContent"]
  }

【讨论】:

  • 哇。我不知道你是作者(应该否认但不是世界末日)。无论如何,这很快!谢谢你。捕获组不是必需的,因为lookbehinds 等,但它是一个非常好的接触!可能也是未来的证明。这是完美的。 Snappy,易于设置,可定制,支持多行。干得好,谢谢。我们可以使用反向引用吗?还是这是 json/vscode 的限制?
  • 您需要找到与字符串开头完全相同的字符(您可以在 ' 分隔的字符串中包含 "。您可以像在任何正则表达式中一样使用反向引用,您只需要转义 backscape \\1 . 总有人会巧妙地使用配置的可能性。
  • 如果您认为可以做一些事情来提高 SEO 曝光率,欢迎您更改我的标题或标签以满足您的需求
【解决方案2】:

使用我编写的扩展程序Find and Transform,您可以通过此键绑定相当轻松地做到这一点:

{
  "key": "alt+y",                     // whatever keybinding you like
  "command": "findInCurrentFile",
  "args": {
    "find": "(?<=([\"'`]))([^\"'`]*)(?=\\1)",  
    "isRegex": true,
    "restrictFind": "nextSelect"   // select the next match, other options here too
  }
}

如果需要,您可以将这些键绑定选项存储在设置中。

正如您从演示中看到的那样,如果您在字符串中触发它,则构建正确的正则表达式非常困难(而且可能不值得麻烦)。但是如果你从一个字符串开始,就触发它两次。

【讨论】:

    猜你喜欢
    • 2016-11-18
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多