
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 \u0000
Format und den Links zu dieser SeiteXTerm-Steuersequenzendieses \u0000
Format wird mit keinem Wort erwähnt.
gefundenDasCTRL
Stack-Link, es hat ein bisschen geholfen, aber ich verstehe immer noch nicht, wie ich den Code für + bekomme, v
den ich kann
verwenden fürterminal.sendSequence
Jede Hilfe wäre wirklich willkommen
Wenn Sie Kontext benötigen, warum ich CTRL
+ v
fü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 \x
und ersetzen Sie sie durch die letzten beiden Zeichen im \u00NN
Code
So können Sie es beispielsweise Ctrl+v
im Terminal mit Ctrl+k Ctrl+enter
der 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 .editor
und Ctrl+D
wie 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 \u0004
entspricht .Ctrl+D