如何通过 terminal.sendSequence 将 CTRL + v 发送到终端?

如何通过 terminal.sendSequence 将 CTRL + v 发送到终端?

我尝试阅读有关如何正确解决这个问题的文档,但我却更加困惑。

文档状态命令仅适用\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

相关内容