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()。
如果您不选择变量,而是将光标放在行尾,则可以使用插入片段的简单键绑定来完成此操作,而无需宏。按键绑定:
\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},\nRun Code Online (Sandbox Code Playgroud)\n\n如果你想要这个输出print(\xe2\x80\x9carr\xe2\x80\x9d: arr),请使用此键绑定:
{\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},\nRun Code Online (Sandbox Code Playgroud)\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},\nRun 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},\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n正如演示 gif 所示,所选文本可以位于该行的任何位置,并且如果该行紧接在该行下方有代码,print()语句将插入到您期望的位置。
注意:这会将您选择的变量保存到剪贴板,以便被覆盖。
\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]\nRun Code Online (Sandbox Code Playgroud)\n