微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设置/使用键盘快捷键替换 Visual Studio Code 中的字符

如何解决设置/使用键盘快捷键替换 Visual Studio Code 中的字符

我想知道的

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

目的

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

例如

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

⬇️

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

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

Replace VSCode

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

我尝试过的/问题

我打开 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
    }
  }

解决方法

根据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)。要使用原始正则表达式,请将整个字符串替换为:

"\"(.+)\""
,

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

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

  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);

演示:

find in file

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

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

并在 filesToInclude 参数中使用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。