如何创建打印变量的快捷方式(vscode)

Ale*_*rov 2 python visual-studio-code vscode-snippets

如何创建自定义快捷方式来生成将在 vscode 中打印选定变量的代码?

[1] arr = [1,2,3,4]  # I press double left mouse button on 'arr'
[2] print(arr)       # Then I press <magic shortcut> (Ctrl+p for example)
                     # And vscode generate [2] row automatically

Run Code Online (Sandbox Code Playgroud)

您可以通过 提供快速调试的方法print()

Mar*_*ark 7

如果您不选择变量,而是将光标放在行尾,则可以使用插入片段的简单键绑定来完成此操作,而无需宏。按键绑定:

\n\n
{\n  "key": "alt+w",\n  "command": "editor.action.insertSnippet",\n  "args": {\n              // works with cursor end of line, no selection\n              // output: print(arr)\n    "snippet": "\\n${TM_CURRENT_LINE/(\\\\s*)(\\\\w*)\\\\b.*/print($2)/}"\n  }\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果你想要这个输出print(\xe2\x80\x9carr\xe2\x80\x9d: arr),请使用此键绑定:

\n\n
{\n  "key": "alt+w",\n  "command": "editor.action.insertSnippet",\n  "args": {\n              // works with cursor end of line, no selection\n              // output: print(\xe2\x80\x9carr\xe2\x80\x9d: arr)\n    "snippet": "\\n${TM_CURRENT_LINE/(\\\\s*)(\\\\w*)\\\\b.*/print(\\"$2\\": $2)/}"\n  }\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于这些更简单的版本,变量必须是行中的第一个单词。

\n\n
\n\n

较旧的答案:

\n\n

不幸的是,这似乎很难用一个简单的片段来完成。将在光标所在的位置插入一个新的片段 - 在您的场景下,该片段将位于您选择的变量上 - 然后第一行的其余部分仍然在片段之后。

\n\n

使用宏扩展相对容易,它允许您执行多个命令,例如多命令或其他命令。

\n\n

安装扩展程序后,在您的设置中:

\n\n
  "multiCommand.commands": [\n\n   {\n     "command": "multiCommand.printVariable",\n\n     "sequence": [\n       "editor.action.clipboardCopyAction",\n       "editor.action.insertLineAfter",\n       {\n         "command": "type",\n         "args": {\n           "text": "print("\n         }\n       },\n       "editor.action.clipboardPasteAction",\n       {\n         "command": "type",\n         "args": {\n           "text": ")"\n         }\n       },\n     ]\n   }\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后在 keybindings.json 中设置一些键绑定:

\n\n
{\n  "key": "alt+q",\n  "command": "extension.multiCommand.execute",\n  "args": { "command": "multiCommand.printVariable" },\n\n  // use the following if you wish to limit the command to python files\n  "when": "resourceExtname == .py"\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n

宏片段演示

\n\n

正如演示 gif 所示,所选文本可以位于该行的任何位置,并且如果该行紧接在该行下方有代码,print()语句将插入到您期望的位置。

\n\n

注意:这会将您选择的变量保存到剪贴板,以便被覆盖。

\n\n
\n\n

如果您的变量始终位于行的开头并被选中,则可以使用更简单的宏:

\n\n
"multiCommand.commands": [\n\n {\n   "command": "multiCommand.printVariable",\n   "sequence": [\n     {\n      "command": "editor.action.insertSnippet",\n      "args": {\n                 // selected variable is at beginning of line\n          "snippet": "${TM_CURRENT_LINE}\\nprint(${TM_SELECTED_TEXT})"\n        }\n      },\n      "cursorEndSelect",    // select to end and delete\n      "editor.action.clipboardCutAction"\n    ]\n  }\n]\n
Run Code Online (Sandbox Code Playgroud)\n