Visual studio code vscode:用于执行简单全局搜索的扩展
我想创建一个扩展,它执行一项非常简单的任务: 我使用以下命令从命令托盘调用命令:Visual studio code vscode:用于执行简单全局搜索的扩展,visual-studio-code,vscode-extensions,Visual Studio Code,Vscode Extensions,我想创建一个扩展,它执行一项非常简单的任务: 我使用以下命令从命令托盘调用命令: > commandName: Query 它应该在正则表达式模式下启动全局搜索,并使用: SomeToken AnotherToken (some|regex*|prefix?|foo) Query 重点是我不想一直键入SomeToken和另一个token(some | regex*| prefix?| foo)前缀。 这听起来是一个非常简单的过程,我希望它在vscode中是可能的,但是我还没有在VSCo
> commandName: Query
它应该在正则表达式模式下启动全局搜索,并使用:
SomeToken AnotherToken (some|regex*|prefix?|foo) Query
重点是我不想一直键入SomeToken和另一个token(some | regex*| prefix?| foo)
前缀。
这听起来是一个非常简单的过程,我希望它在vscode中是可能的,但是我还没有在VSCode API和相关教程中找到任何关于它的内容。我发布了一个扩展,允许您创建和保存预定义的find/replaces或search/replaces:并通过命令调色板中的命令或通过键绑定调用它们。示例设置:
"findInCurrentFile": {
"upcaseSwap2": {
"title": "swap iif <==> hello",
"find": "(iif) (hello)",
"replace": "_\\u$2_ _\\U$1_", // double-escaped case modifiers
"restrictFind": "selections"
},
"upcaseSelectedKeywords": {
"title": "Uppercase selected Keywords",
"find": "(epsilon|alpha|beta)",
"replace": "\\U$1",
// "restrictFind": "selections"
}
},
"runInSearchPanel": {
"removeDigits": {
"title": "Remove digits from Arturo",
"find": "^(\\s*Arturo)\\d+",
"replace": "$1",
"isRegex": true,
"triggerSearch": true,
// "filesToInclude": "${file}"
"filesToInclude": "${file}",
}
},
下面是使用
vscode.commands.registerCommand
调用中所选文本的扩展代码的核心:
let disposable=vscode.commands.registerCommand('myExtensionName.myCommand',函数(){
//获取所选文本或在此处打开输入框
const selection=vscode.window.activeTextEditor.selection;
const selectedText=vscode.window.activeTextEditor.document.getText(选择);
常量搜索选项={
查询:“(enum | struct | fn | trait | impl()?| type)”+selectedText,
触发器搜索:是的,
伊斯雷格斯:没错
};
vscode.commands.executeCommand('workbench.action.findInFiles',searchOptions);
});
context.subscriptions.push(一次性);
这将打开一个输入框,从用户处获取查询条件:
let disposable=vscode.commands.registerCommand('myExtensionName.myCommand',函数(){
vscode.window.showInputBox({prompt:“输入搜索查询”})。然后(查询=>{
常量搜索选项={
查询:“(enum | struct | fn | trait | impl()?| type)”+query,
触发器搜索:是的,
伊斯雷格斯:没错
};
vscode.commands.executeCommand('workbench.action.findInFiles',searchOptions);
})
});
context.subscriptions.push(一次性);
显然,您必须添加一些错误检查。为什么搜索栏对您不起作用(Ctrl+Shift+F),还要查找此Bar顶部的
打开新搜索编辑器
按钮我不喜欢手动打开搜索栏(即使是通过键盘,我已经这样做了)因为键入regex前缀会很麻烦,我想优化我的工作流程:)。我将在问题中说明这一点。搜索和替换字段有历史记录,请使用向上和向下箭头键。您可以让扩展插件用所需字符串填充剪贴板,或者您可以尝试设置一个使用type
命令键入所需字符串的键绑定,或者在焦点位于搜索查找字段(keybindingwhere
子句)时让扩展插件使用type
命令历史记录很酷,但对于我的用例来说,这并不是最理想的。剪贴板是一个更好的步骤,但仍然添加了一个冗余步骤,您需要手动调用搜索。type命令似乎是最有前途的,但我想知道,您是否也可以(以编程方式)将焦点强制放在search-find字段上?然后,我可以通过一次命令调用来实现整个过程的端到端。每个f代表什么:SomeToken另一个token(some | regex*| prefix?| foo)
?如果我们不知道您想在哪里输入什么,那么很难提供帮助。SomeToken
是搜索词吗,AnotherToken
是替换词吗?(some | regex*| prefix?| foo)
到底是什么?很抱歉我耽搁了@Mark几天,我很忙,把它书签在书签里,以便稍后再签出。你的回答非常好,现在我有一些非常好的选择来满足我的需要。谢谢一旦我尝试了所有的方法,我会写进一步的反馈。
{
"key": "ctrl+shift+g", // whatever keybinding you wish
"command": "search.action.openNewEditor",
"args": {
"query": "(enum|struct|fn|trait|impl(<.*>)?|type) ${selectedText}",
"isRegexp": true,
// "includes": "${relativeFile}", // works
"showIncludesExcludes": true,
"triggerSearch": true,
"contextLines": 2,
"focusResults": true,
},
"when": "editorTextFocus"
}
{
"key": "ctrl+shift+f",
"command": "workbench.action.findInFiles",
"args": {
"query": "(enum|struct|fn|trait|impl(<.*>)?|type) ",
"isRegex": true,
// "replace": "$1",
"triggerSearch": true, // seems to be the default
// "filesToInclude": "${relativeFileDirname}", // no variables in findInFiles
"preserveCase": true,
"useExcludeSettingsAndIgnoreFiles": false,
"isCaseSensitive": true,
// "matchWholeWord": true,
// "filesToExclude": ""
}
},