【问题标题】:How to return focus to editor in VS Code macro sending Python text to Debug Console?如何在将 Python 文本发送到调试控制台的 VS Code 宏中将焦点返回到编辑器?
【发布时间】:2018-09-02 13:36:08
【问题描述】:

我尝试通过键绑定宏来将 python 文本发送到调试控制台并将焦点返回到 Visual Studio Code 中的编辑器。这是我尝试过的:

settings.json:

{
    "macros": {
        "selectionToReplAndReturnToEditor": [
            "editor.debug.action.selectionToRepl",
            "workbench.action.focusActiveEditorGroup"
        ]
    }
}

keybindings.json:

[
    {
        "key": "alt+f9",
        "command": "workbench.action.focusActiveEditorGroup",
    },
    {
        "key": "alt+f10",
        "command": "workbench.debug.action.focusRepl",
    },
    {
        "key": "ctrl+enter",
        "command": "macros.selectionToReplAndReturnToEditor",
        "when": "editorTextFocus && editorHasSelection && editorLangId == 'python' && inDebugMode"
    }
]

现在,Ctrl+Enter 会在调试控制台中执行文本,但不会将焦点返回到编辑器。 Ctrl+Enter 后跟 Alt+F9 这样做,但当然,我想绑定一个钥匙。难道我做错了什么?我需要在宏中等待一些时间吗?我怎样才能做到这一点?

【问题讨论】:

  • 我也有同样的问题。从那时起你找到答案了吗?
  • @kobi7 看我的回答。

标签: python macros visual-studio-code


【解决方案1】:

@bers 的回答是天赐良机。这是完整的解决方案。

这里我们需要做几件事:

  1. 要将内容发送到调试器的集成 REPL,您需要名为 editor.debug.action.selectionToRepl 的操作。
  2. 那么您需要弄清楚如何将焦点返回到活动编辑器。这就是多命令扩展的用武之地。
  3. 最后,您需要调整您的键绑定,以便只有在 debugMode 开启时才会激活它。

keybindings.json

  {
    "key": "cmd+enter",
    "command": "workbench.action.terminal.runSelectedText",
    "when": "editorHasSelection && editorTextFocus && !inDebugMode"
  },

  {
    "key": "cmd+enter",
    // This needs to be the command you define above.
    "command": "extension.multiCommand.execute",
    "args": { "command": "multiCommand.selectionToReplAndReturnToEditor" },
    "when": "editorTextFocus && editorHasSelection && editorLangId == 'python' && inDebugMode" 
  },

settings.json

"multiCommand.commands": [ // requires vscode:extension/ryuta46.multi-command
    { // ctrl+enter, editorTextFocus && editorHasSelection && editorLangId == 'python' && inDebugMode
      "command": "multiCommand.selectionToReplAndReturnToEditor",
      "sequence": [
        "editor.debug.action.selectionToRepl",
        "workbench.action.focusActiveEditorGroup",
      ]
    },
  ]

【讨论】:

  • 非常感谢!谁能解释为什么这不是 vscode 的默认内置功能?
  • 如果有办法改进它会很棒,当没有选择文本时,它将整个当前行发送到 REPL。
【解决方案2】:

这工作,使用不同的扩展:

"multiCommand.commands": [ // requires vscode:extension/ryuta46.multi-command
    { // ctrl+enter, editorTextFocus && editorHasSelection && editorLangId == 'python' && inDebugMode
        "command": "multiCommand.selectionToReplAndReturnToEditor",
        "sequence": [
            "editor.debug.action.selectionToRepl",
            "workbench.action.focusActiveEditorGroup",
        ]
    },
}

【讨论】:

    【解决方案3】:

    谢谢!它对我来说并不完全有效。 我猜在焦点文本编辑器中选择的代码和实际光标之间存在差异。 我应该问这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-24
      • 2014-11-22
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 2020-05-02
      • 2011-12-04
      • 1970-01-01
      相关资源
      最近更新 更多