在数年前,刚使用python时,记得大多IDE都支持选中部分python代码片段,然后发送到ipython中交互式地执行。最初在vscode下运行python时,就感慨为什么这个功能不行呢?(可也能是当时没有找到方式)
最近看到了这个命令:workbench.action.terminal.sendSequence,如果选中文本,再运行这个命令,发送到一个运行ipython的terminal,那这就是前面的功能啦。参考vscode variable reference,得到变量 ${selectedText},于是就有了下面的快捷键设置(keybinding.json)
{
"key": "cmd+x",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "${selectedText}"
}
}
效果如同预期,这里就不再展示。
220721补充
考虑bracketed paste mode
上面有一个问题,实际上这里的代码是模拟直接paste代码的,然而没有考虑bracketed paste mode。在支持该模式的程序中,我遇到的是ptpython
,它会当作是手动type的字符流,会产生一些“小”问题。
更新后如下
{
"key": "cmd+x",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u001b[200~${selectedText}\u001b[201~"
}
}
注意json中的\e
只能使用\u001b
代替