
Я попытался прочитать документацию о том, как правильно это понять, и только еще больше запутался.
Документыкоманды состояния работают только с \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
в приведенном выше примере.