Visual Studio Code: 如何自动化一个简单的正则表达式查找和替换?

20

我尝试在Visual Studio Code中创建一个简单的正则表达式查找和替换任务。

目前,我从AD复制一些用户到Visual Studio Code的临时文件中,并删除行首的"CN="以及第一个逗号后面的所有附加信息(正则表达式:,.*$)。这可以通过VSCode中的查找和替换很好地实现,但每次想要删除这个内容时都需要手动输入。

因此,问题是,是否有可能自动化这种任务?我知道有一些外部工具(https://code.visualstudio.com/docs/editor/tasks),但我不知道如何使用它们...

编辑:请求示例(我的正则表达式可用,问题不在于此:/。我需要一个示例来自动执行此任务...)

示例

CN=Test User,OU=Benutzer,OU=TEST1,OU=Vert,OU=ES1,OU=HEADQUARTERS,DC=esg,DC=corp

期望输出

Test User

请提供一个输入示例和预期输出。 - Rodrigo Ferreira
编辑了我的答案并添加了一个“示例”。 - Oskar
4个回答

17

这个插件可以完成任务:

https://marketplace.visualstudio.com/items?itemName=joekon.ssmacro#overview

看起来正则表达式符合以下规则:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

示例

创建一个名为regex.json的文件:

[{
    "command": "ssmacro.replace",
    "args": {
        "info": "strip out EOL whitespace",
        "find": "\\s+$",
        "replace": "",
        "all": true,
        "reg": true,
        "flag": "gm"
    }
}]

"info"只是一个提醒,没有实际作用。

keybindings.json中设置一个快捷键:

"key": "ctrl+9",
"command": "ssmacro.macro", "args": {"path": "C:\\...\\regex.json"}

您可以将多个命令批处理在一起,[{...},{...}] 这对于一次性应用整个正则表达式操作非常有用。


抱歉打扰您了,我已经找到了批处理的解决方案。只需像您在[]之间添加新块,并使用逗号分隔这些命令块即可。 - halliballi
我使用相同的扩展名,但参数“all”没有起作用?如果将其设置为false,则不会替换任何内容。如果将其设置为true,则只有一个匹配项被替换(每次执行)。 - Syrlia
这在文档中有说明。all参数指定操作是仅在当前选择中进行还是在整个文档中进行。 请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags以获取标志,这是必须使用的。您可能缺少“g”。 - Phil B
在JSON文件中不需要间接引用:作为单个操作宏,可以直接使用ssmacro.replace将其绑定到键上。 - lapo
在路径字符串中使用 \ 会导致 Invalid escape character in string 错误吗?此外,我认为 macros 插件可能更容易使用。 - ANimator120
显示剩余2条评论

8
截至今天,似乎没有extension实现此功能。这里有两个除了被接受的答案中提出的一个之外的其他open-source的扩展:

Batch Replacer (但它不能在编辑器中打开的文档上工作:"你必须打开一个文件夹进行编辑,所有文件将被更新"*)

Replace Rules: 你只需要在settings.json中添加一些规则(使用F1ctrl+shift+p打开命令面板并选择Preferences: open settings (JSON))。

"replacerules.rules": {
    "Remove trailing and leading whitespace": {
        "find": "^\\s*(.*)\\s*$",
        "replace": "$1"
    },
    "Remove blank lines": {
        "find": "^\\n",
        "replace": "",
        "languages": [
            "typescript"
        ]
    }
}

被接受回答中的扩展采用MIT许可证,这是所有开源许可证中最少限制的一种。https://www.quora.com/What-is-the-difference-between-open-source-licenses-MIT-CC0-Apache-GNU-etc - Diego Shevek
抱歉,我修改了我的答案。 - MagTun
基于具有源链接和似乎更近期维护的两个方面,我必须将这两个加分项与ssmacro相比较。 - Phil B

1

这里是我编写的一个扩展,它允许您将查找/替换保存到文件中或作为命名命令和/或键绑定搜索多个文件:查找和转换。使用原始问题中的设置(在settings.json中):

"findInCurrentFile": {                // in settings.json
  "reduceUserEntry": {
    "title": "Reduce User to ...",    // will appear in the Command Palette
    "find": "CN=([^,]+).*",
    "replace": "$1",
    "isRegex": true,
    // "restrictFind": "selections",     // default is entire document
  }
},

你也可以使用这个设置来搜索文件中的内容:

"runInSearchPanel": {
  "reduceUserEntry": {
    "title": "Reduce User to ...",      // will appear in the Command Palette
    "find": "CN=([^,]+).*",
    "replace": "$1",
    "isRegex": true
    
    // "filesToInclude": "${fileDirname}"
    // "onlyOpenEditors": true
    // and more options
  }
}

作为一个独立的按键绑定:
{
  "key": "alt+r",                     // whatever keybinding you want
  "command": "findInCurrentFile",     // or runInSearchPanel
  "args": {
    "find": "CN=([^,]+).*",
    "replace": "$1",   
    "isRegex": true

该扩展还可以运行多个查找/替换操作 - 只需将它们放入数组中:

"find": ["<要查找的术语1>", "<要查找的术语2>", 等等。

同样,使用替换操作时也要用一个数组来存储多个替换操作。


0

扩展文件夹是:%USERPROFILE%\.vscode\extensions


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接