¿Cómo enviar CTRL + v a la terminal a través de terminal.sendSequence?

¿Cómo enviar CTRL + v a la terminal a través de terminal.sendSequence?

Intenté leer la documentación sobre cómo resolver esto correctamente y me confundí aún más.

los documentosLos comandos de estado solo funcionan con el \u0000formato y los enlaces a esta página.Secuencias de control XTermNo hagas mención de este \u0000formato.

encontróesteenlace de pila, me ayudó un poco, pero todavía no entiendo cómo puedo obtener el código para CTRL+ vque puedo

usar paraterminal.sendSequence

Cualquier ayuda sería realmente bienvenida.

Si necesita contexto de por qué necesito CTRL+ vpara terminal a través de terminal.sendSequence, lea lo siguiente.


Actualmente en VScode, el pegado del Portapapeles en el terminal lo realiza VScode, no Powershells PSReadline.

¿Por qué esto importa? Si hay varias líneas en el portapapeles, VScode pegará y ejecutará una línea a la vez, de modo que haga lo siguiente:

Function Hello{
    Write-Host "Hello World"
}

Al pegar en una terminal Powershell: Línea 1:

Function Hello{

Línea 2:

Write-Host "Hello World"

Línea 3:

}

He leído y leído para intentar desactivar esto. EsteEnlacemenciona que el proceso del host está arruinando el portapapeles, por lo tanto, haga que PSReadline se encargue de pegar

Pude confirmar que este es el caso con VScode y utilicé esta configuración:

  "terminal.integrated.sendKeybindingsToShell": true,

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

Lo que solucionó el problema, PSReadline no permite pegar, pero ahora PSReadline también maneja cualquier otra combinación de teclas, incluidas las teclas de la práctica barra de búsqueda VSCode para Terminal.

Realmente no quiero seguir la ruta de enumerar todos los comandos que quiero que Vscode maneje.terminal.integrated.commandsToSkipShell

Respuesta1

Elenlaceusted proporcionó referencias yXterm.jsArchivo que contiene varios códigos de control.

Uno de ellos enumerados es para ^V:

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

Utilice los caracteres posteriores \xy reemplácelos con los 2 últimos caracteres del \u00NNcódigo.

Por ejemplo, para activar Ctrl+ven la terminal usando Ctrl+k Ctrl+enterun acceso directo:

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

Tuve un problema similar al intentar enviar contenido de varias líneas al shell del nodo interactivo y tuve que ajustar el texto seleccionado entre .editory Ctrl+Dde la siguiente manera:

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

Tenga en cuenta que \u0004corresponde Ctrl+Dal ejemplo anterior.

información relacionada