【问题标题】:Set/use a keyboard shortcut to replace a character in Visual Studio Code设置/使用键盘快捷键替换 Visual Studio Code 中的字符
【发布时间】:2021-06-06 21:15:24
【问题描述】:

我想知道的

  • 如何设置键盘快捷键以将"" 替换为''
  • 或者是否有默认快捷方式将"" 替换为''

目的

我在 Mac 上使用 Visual Studio Code。我经常用''替换""

例如,

const foo = "foo";
const bar = "bar";

⬇️

const foo = 'foo';
const bar = 'bar';

我通常将 Visual Studio Code 的替换函数与这样的正则表达式一起使用。

我想为此操作注册一个键盘快捷键,因为我经常这样做。

我尝试了什么/问题

我打开keybindings.json 并尝试在其中设置键盘快捷键。但我不知道该写什么。

[
  {
    "key": "shift+cmd+'",
    "command": "actions.find" // ?????????
  }
]

我应该在里面写什么?或者是否有默认快捷方式将"" 替换为''


编辑:

根据 Jeff Brower 的回答(谢谢!),"args" 可能对我的目的有所帮助。我正在尝试更改他/她的代码。

我在keybindings.json 中这样写过,但它不起作用:

  {
    "key": "shift+cmd+'",
    "command": "editor.action.startFindReplaceAction",
    "args": {
      "query": "\"(.+)\"",
      "replace": "'$1'",
      "triggerSearch": true,
      "isRegex": true,
      "matchWholeWord": true,
      "isCaseSensitive": false
    }
  }

【问题讨论】:

标签: visual-studio-code replace keyboard-shortcuts vscode-settings


【解决方案1】:

根据this question 的回答,没有内置的方法可以做到这一点。但是,我确实得到了一个类似的键绑定工作。这将搜索工作台中的所有文件:

{
    "key": "ctrl+shift+'",
    "command": "workbench.action.findInFiles",
    "args": {
        "query": "\"((?:\\\\[\"'\\\\bfnrt]|[^\\\\\"'\\n\\r])*)\"",
        "replace": "'$1'",
        "triggerSearch": true,
        "isRegex": true,
        "matchWholeWord": true,
        "isCaseSensitive": true
    }
}

主要的警告是它不会自动执行替换,但它会填写查找和替换的字段。

我还稍微改进了正则表达式以处理 javascript 样式的转义,并允许空字符串 (unit tests)。要使用原始正则表达式,请将整个字符串替换为:

"\"(.+)\""

【讨论】:

  • 感谢您提供 JSON 代码 :) 这就是我想要的代码。我正在尝试对其进行更改以适应我的目的。
【解决方案2】:

它可以通过扩展来完成,我将展示它的代码。如果需要,扩展程序允许您设置键绑定。

但是通过这些步骤很容易完成您想要的。

  1. 选择任何"
  2. Cmd+Shift+L 选择所有出现的"
  3. 输入'

扩展代码的工作部分:

let disposable = vscode.commands.registerCommand('yourExtensionName.someCommandName', async function () {

  const fileName = vscode.workspace.asRelativePath(vscode.window.activeTextEditor.document.uri);

  vscode.commands.executeCommand('workbench.action.findInFiles',
    {
      query: "\"(.+)\"",
      replace: "'$1'",
      triggerSearch: true,
      isRegex: true,
      filesToInclude: fileName
      // preserveCase: true,
      // useExcludeSettingsAndIgnoreFiles: true,
      // isCaseSensitive: true,
      // matchWholeWord: true,
      // filesToExclude: "./*.css"
      }).then(() => {
        setTimeout(() => {
          vscode.commands.executeCommand('search.action.replaceAll');
        }, 1000);
      });
});

context.subscriptions.push(disposable);

演示:

该扩展与findInFiles 命令一起使用,因为actions.find 不会接受参数。但仅限于当前文件。它找到当前的文件名:

const fileName = vscode.workspace.asRelativePath(vscode.window.activeTextEditor.document.uri);

并在filesToInclude 参数中使用它。

【讨论】:

  • 感谢您的提示 :) 该扩展程序看起来很整洁。我会试试看。我自己在笑。你说得对。我不需要使用正则表达式将" 替换为'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
相关资源
最近更新 更多