Wie sende ich STRG + V über terminal.sendSequence an das Terminal?

Wie sende ich STRG + V über terminal.sendSequence an das Terminal?

Ich habe versucht, die Dokumentation zum richtigen Herausfinden dieser Frage zu lesen, und bin dadurch nur noch verwirrter geworden.

Die DokumenteStatusbefehle funktionieren nur mit dem \u0000Format und den Links zu dieser SeiteXTerm-Steuersequenzendieses \u0000Format wird mit keinem Wort erwähnt.

gefundenDasCTRLStack-Link, es hat ein bisschen geholfen, aber ich verstehe immer noch nicht, wie ich den Code für + bekomme, vden ich kann

verwenden fürterminal.sendSequence

Jede Hilfe wäre wirklich willkommen

Wenn Sie Kontext benötigen, warum ich CTRL+ vfür das Terminal über brauche terminal.sendSequence, dann lesen Sie das Folgende.


Derzeit wird in VScode das Einfügen aus der Zwischenablage in das Terminal von VScode und nicht von Powershells PSReadline übernommen.

Warum ist das wichtig? Wenn sich mehrere Zeilen in der Zwischenablage befinden, fügt VScode jeweils eine Zeile ein und führt sie aus. Das Folgende ist also das Folgende:

Function Hello{
    Write-Host "Hello World"
}

Beim Einfügen in ein Powershell-Terminal: Zeile 1:

Function Hello{

Zeile 2:

Write-Host "Hello World"

Zeile 3:

}

Ich habe gelesen und gelesen, um zu versuchen, dies zu ändern. DiesVerknüpfungerwähnt, dass der Host-Prozess die Zwischenablage durcheinander bringt, lassen Sie daher PSReadline das Einfügen übernehmen

Ich konnte bestätigen, dass dies bei VScode der Fall ist und habe diese Einstellung verwendet:

  "terminal.integrated.sendKeybindingsToShell": true,

  " `": [
    "workbench.action.focusActiveEditorGroup"
  ],

Dadurch wurde das Problem behoben, dass PSReadline das Einfügen ohne Benutzereingriff ermöglicht, aber jetzt verwaltet PSReadline auch jede andere Tastenkombination ohne Benutzereingriff, einschließlich der Tasten für die praktische VSCode-Suchleiste für das Terminal.

Ich möchte wirklich nicht den Weg gehen, jeden Befehl aufzulisten, den Vscode verarbeiten sollterminal.integrated.commandsToSkipShell

Antwort1

DerVerknüpfungSie haben Referenzen angegebenXterm.jsDatei, die verschiedene Steuercodes enthält.

Einer der aufgeführten Punkte ist für ^V:

  /** Synchronous Idle (Caret = ^V) */
  export const SYN = '\x16';

Verwenden Sie die Zeichen danach \xund ersetzen Sie sie durch die letzten beiden Zeichen im \u00NNCode

So können Sie es beispielsweise Ctrl+vim Terminal mit Ctrl+k Ctrl+enterder Tastenkombination auslösen:

{
  "key": "ctrl+k ctrl+enter",
  "command": "workbench.action.terminal.sendSequence",
  "args": { 
    "text": "\u0016"
  }
},

Ich hatte ein ähnliches Problem beim Versuch, mehrzeiligen Inhalt an die interaktive Knoten-Shell zu senden, und musste den ausgewählten Text zwischen .editorund Ctrl+Dwie folgt umbrechen:

{
  "key": "ctrl+k ctrl+enter",
  "command": "workbench.action.terminal.sendSequence",
  "when": "editorTextFocus && terminalIsOpen",
  "args": { 
    "text": ".editor\n${selectedText}\n\u0004"
  }
},

Beachten Sie, dass dies dem obigen Beispiel \u0004entspricht .Ctrl+D

verwandte Informationen