我尝试阅读有关如何正确解决这个问题的文档,但我却更加困惑。
文档状态命令仅适用\u0000
于此页面的格式和链接XTerm 控制序列没有提及这种\u0000
格式。
成立这堆栈链接,它有点帮助,但我仍然不明白如何获取我可以获取的CTRL
+代码v
用于terminal.sendSequence
任何帮助都会非常受欢迎
如果您需要了解为什么我需要 CTRL
+v
作为终端通过terminal.sendSequence
,请阅读以下内容。
目前在 VScode 中,剪贴板粘贴到终端由 VScode 处理,而不是 Powershells PSReadline。
这为什么很重要?如果剪贴板中有多行,VScode 将一次粘贴并执行一行,因此以下内容:
Function Hello{
Write-Host "Hello World"
}
粘贴到 Powershell 终端后:第 1 行:
Function Hello{
第 2 行:
Write-Host "Hello World"
第 3 行:
}
我读了又读,试图扭转这种局面。关联提到主机进程弄乱了剪贴板,因此让 PSReadline 来处理粘贴
我可以确认 VScode 确实存在这种情况,并使用了以下设置:
"terminal.integrated.sendKeybindingsToShell": true,
" `": [
"workbench.action.focusActiveEditorGroup"
],
这解决了该问题,PSReadline 无法处理粘贴,但现在 PSReadline 也无法处理所有其他键绑定,包括用于终端的方便的 VSCode 查找栏的键。
我真的不想列出我希望 Vscode 处理的每个命令terminal.integrated.commandsToSkipShell
答案1
这关联你提供了参考资料Xterm.js包含各种控制代码的文件。
其中列出的一个适用于^V
:
/** Synchronous Idle (Caret = ^V) */
export const SYN = '\x16';
使用后面的字符并将其替换为代码\x
中的最后 2 个字符\u00NN
例如,Ctrl+v
使用快捷方式在终端中触发Ctrl+k Ctrl+enter
:
{
"key": "ctrl+k ctrl+enter",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0016"
}
},
我在尝试将多行内容发送到交互式节点 shell 时遇到了类似的问题,并且必须将选定的文本换行到和之间,.editor
如下Ctrl+D
所示:
{
"key": "ctrl+k ctrl+enter",
"command": "workbench.action.terminal.sendSequence",
"when": "editorTextFocus && terminalIsOpen",
"args": {
"text": ".editor\n${selectedText}\n\u0004"
}
},
请注意,在上面的例子中\u0004
对应于。Ctrl+D