Как отправить CTRL + v на терминал через terminal.sendSequence?

Как отправить CTRL + v на терминал через terminal.sendSequence?

Я попытался прочитать документацию о том, как правильно это понять, и только еще больше запутался.

Документыкоманды состояния работают только с \u0000форматом и ссылками на эту страницуПоследовательности управления XTermне упоминайте этот \u0000формат.

найденныйэтотСсылка на стек, это немного помогло, но я все еще не понимаю, как мне получить код для CTRL+ v, который я могу

использовать дляterminal.sendSequence

Любая помощь будет очень кстати.

Если вам нужен контекст, почему мне нужен CTRL+ vдля терминала через terminal.sendSequence, то прочтите следующее.


В настоящее время в VScode вставка буфера обмена в терминал выполняется VScode, а не PSReadline Powershell.

Почему это важно? Если в буфере обмена несколько строк, 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

TheсвязьВы предоставили ссылки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"
  }
},

У меня возникла похожая проблема при попытке отправить многострочный контент в интерактивную оболочку узла, и мне пришлось заключить выделенный текст между .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в приведенном выше примере.

Связанный контент