当前位置: 首页 > 知识库问答 >
问题:

使用keybinding在VSCode中执行预定义的Find Replace All

司寇经亘
2023-03-14

我似乎找不到一个可以从VSCode键绑定运行的文档化命令的好列表。

在联机VSCode文档中,《命令指南》列出了两种发现命令的方法:

  • 浏览键盘快捷键
  • 查看VS代码的内置高级命令api

键盘快捷键的命令通常是不带参数的“简单”命令。“高级命令api”似乎缺少一些非常基本的命令。

例如,在VSCode Keybindings页面上有一个名为“命令参数”的部分,其中包含以下示例条目:

{ "key": "enter", "command": "type",
  "args": { "text": "Hello World" },
  "when": "editorTextFocus" }

但是我没有看到type命令被记录在案。所以我假设可能还有其他一些类似的基本命令,但我不知道在哪里可以找到它们的文档。

无论如何,我现在真正想要的是一个命令,我可以运行它在当前编辑器中执行预定义的搜索和替换,指定查找文本、替换文本和选项。。。如下所示:

{ "key": "ctrl+shift+8", 
  "command": "findReplaceAll",
  "args": { 
    "findText": "Company(\\w+)", 
    "replaceText": "User$1"
    "options": { "ignoreCase": false, "wholeWord": true, "regex": true }
  },
  "when": "editorTextFocus" }

但是我在文档中找不到任何这样的findReplaceAll命令或类似的东西,但肯定存在类似的东西,对吗?

谢谢

共有3个答案

韩豪
2023-03-14

正如@AurSaraf所指出的,新的工作即将到来,这将允许创建一个内置命令(或在扩展名中使用),以使用预设的查找/替换和选项在当前文件中查找。

我已经评论了github问题,试图让args与其他类似的命令保持一致,但没有成功。以下是键绑定中当前可用的参数:

{
  "key": "alt+p",
  "command": "editor.actions.findWithArgs",
  "args": {

    "searchString": "howd\\d",      // double-escaped
    "replaceString": "qqqq9",
    "isRegex": true,
    // "regexOverride": 1,
    "findInSelection": false,
    "matchWholeWord": false,
    // "matchCase": false,
    // "matchCaseOverride": 0,
    "preserveCase": false,
    "isCaseSensitive": false
    // "preserveCaseOverride": 0,
    // "wholeWordOverride": 0
  }
}

注释掉的参数不可用,尽管intellisense显示它们是可用的——所以命令仍然有点“粗糙”——并且目前只在内部构建中可用。不要依赖args键的智能感知——在这一点上,它们中的许多都是错误命名或不起作用的。

另外,请注意,不要使用工作台中使用的查询替换。行动在搜索中查找文件。行动openEditor(打开新的搜索编辑器)键绑定,由于某种原因,此命令当前使用searchStringreplaceString

要获得一个强大的扩展来执行大量预定义的查找/替换或搜索/替换所有参数,请参阅查找和转换(我写的)。特别是,有很多选项用于将文件设置为包括范围过滤器——比如当前文件或在以前的搜索结果中找到的最后一个文件,以将搜索范围缩小到仅这些文件。

还有一种内置的方法可以跨文件查找,我不知道在您的问题之后是否添加了参数。无论如何,我同意有时很难发现哪些命令可以接受参数。

有时,命令中键绑定中的intellisense会显示它们,但并不总是如此。

因此,检查这个:

{
 "key": "ctrl+shift+f",
 "command": "workbench.action.findInFiles",
 "args": {
   <cursor here>  // cursor there and type Ctrl+space
  }
}

将显示可用的args,如下例所示。

{
  "key": "ctrl+shift+f",
  "command": "workbench.action.findInFiles",
  "args": {

    "query": "Company(\\w+)",   // needs to be double-escaped
    "replace": "User$1",
    "triggerSearch": true,
    "isRegex": true,
  
    // "filesToExclude": "",
    // "filesToInclude": "",
    "matchWholeWord": true,
    "isCaseSensitive": true
  }
},

这将执行搜索,但不会在您的文件中进行实际替换-您必须自己触发替换[all]

朱刚捷
2023-03-14

我正在寻找一个API来做这作为一个扩展作家,它似乎是一个添加不到一个月前(你也可以用它来手动定义一个键绑定,如果我理解正确):

https://github.com/microsoft/vscode/commit/8e96e0b389aedf46423431487190b878d4243edb

方光华
2023-03-14

安装扩展替换规则。

在您的settings.json(工作区或用户)中构造搜索替换。阅读关于可能性的页面。

  "replacerules.rules": {
    "Replace User": {
      "find": "User(\d+)",
      "replace": "Player$1"
    }
  }

键绑定中。json定义以下键绑定:

  {
  "key": "ctrl+shift+alt+u",
  "command": "replacerules.runRule",
  "when": "editorTextFocus",
  "args": { "ruleName": "Replace User"}
  }

如果选择某些文本,则搜索替换将仅在所选内容内执行。

 类似资料:
  • 例子 #include <stdio.h> int main (void) { int i, sum; for (i = 1, sum = 0; i <= 10; i++) { sum += i; #ifdef DEBUG printf ("sum += %d is %d\n", i, sum); #endif } print

  • 我正在处理一个vscode扩展,它需要执行一个外部程序来执行不同的任务。如果外部程序没有参数:UI pop。使用cmd行参数:cmd行模式。我已经使用electron构建了这个应用程序,它在调试和在cmd行上使用electron启动时运行良好。这是一个包裹。exe在Windows上运行,在命令行或直接双击命令行中也同样有效。 当我试图用child_进程从我的vscode扩展执行它时,事情变得糟糕了

  • } 预期的结果应该是:当编写'test-argumentcompleterf'时,点击tub按钮后,F autocompleted到ful。提前感谢您的帮助!

  • 问题内容: 我只想从特定文件夹执行文件。就我而言/ data / data / my-package / files /。所以我试着: 没用 谁能告诉我正确的做法。谢谢 问题答案: 应该可以使用以下命令在特定的工作目录下调用可执行文件: 如下: 也许没有完整的途径 而不是硬编码,该路径也应该起作用,并且比您自己指定路径更安全/更干净,因为不能保证该 路径始终是所有设备的正确路径。 问题在于目录已针

  • 我使用react-bootstrap-datetimerangepicker库和bind()从日历中获取选定的日期,但是这个库的“on apply”函数传递了两个参数(event、picker),在“预定义”中,我没有得到假定出现在第二个参数中的startDate和endDate。没有束缚它就不起作用 https://github.com/luqin/react-bootstrap-datetim