如何解决设置/使用键盘快捷键替换 Visual Studio Code 中的字符
我想知道的
目的
我在 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
}
}
解决方法
根据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)。要使用原始正则表达式,请将整个字符串替换为:
"\"(.+)\""
,
它可以通过扩展来完成,我将展示代码。如果需要,扩展程序允许您设置键绑定。
但是通过这些步骤很容易完成您想要的。
- 选择任何
"
。 -
Cmd+Shift+L 选择所有出现的
"
。 - 输入
'
。
扩展代码的工作部分:
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
参数中使用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。