首页 > 解决方案 > 绑定命令以转到 VS Code 中的特定符号

问题描述

我的问题:

我想绑定一些键盘快捷键来导航到我当前在 VS Code 中打开的文件中的特定符号。

例子:

默认情况下,您可以通过按cmd+p,然后在调色板中键入@template,这将跳转到打开文件中的模板标签。

因此,我的 keybinding.json 中的解决方案可能看起来像这样:

  { 
    "key": "cmd+1",
    "command": "workbench.action.gotoSymbol",
    "args": ["@template"], 
  }

但是,其中的 args 部分不起作用。我想知道是否有人知道设置这样的键绑定的好解决方案,以便我可以使用快捷方式浏览我的文件。

提前致谢!

标签: visual-studio-code

解决方案


尝试这个:

{ 
  "key": "cmd+1",
  "command": "workbench.action.quickOpen",
  "args": "@<template>", 
},

该命令workbench.action.gotoSymbol不会带参数,但workbench.action.quickOpen会。我不知道为什么会有这种差异,但如您所知,如果您启动快速打开面板,@您将获得对象引用。例如,您的其余文本<template>将自动输入到输入框中。

它将过滤这些符号,但不会跳转到第一个。如果您想要该附加功能,则必须考虑选择第​​一个条目的宏。


有一种替代方法允许您使用匹配的正则表达式导航到任何内容。请参阅允许跳转到任何字符串的扩展名Select By 。例如(在 settings.json 中):

"selectby.regexes": {

  "goTo<template>": {
    "moveby": "<template>",
  }
}

和你的键绑定(keybindings.json):

{
  "key": "ctrl+1",            // <template>`
  "command": "moveby.regex",
  "args": ["go<template>", "moveby", "next", "start", "wrap"],
  // "when": "editorTextFocus && editorLangId == javascriptreact"
}

您也可以将其设置为跳转到上一个实例:

{
  "key": "ctrl+alt+1",            // previous <template>
  "command": "moveby.regex",
  "args": ["goTo<template>", "moveby", "prev", "start", "wrap"],
  // "when": "editorTextFocus && editorLangId == javascriptreact"
}

无论哪种方式,它现在都应该“换行”,它只取决于文件中有多少<templates>以及您想首先转到哪个方向。


推荐阅读