
# When I do just Shift-Insert, I get
~$ 2~
# When I do Ctrl-V, then Shift-Insert, I get
~$ ^[[2;2~
Shift-insert хорошо работает и в других ситуациях, например, в Windows CMD или Git-Bash.
В wsl я могу использовать Ctrl-Shift-V для вставки, но предпочитаю shift-insert.
Есть ли какой-нибудь обходной путь?
решение1
В соответствии смайкрософт/WSL:
Обратите внимание, что дистрибутив WSL запускается в консоли Windows (если вы не предприняли шаги для запуска сторонней консоли/терминала). Поэтому, пожалуйста, сообщайте о проблемах, связанных с UI/UX, вКонсоль Windowsсистема отслеживания проблем.
Но данная ссылка дляКонсоль Windowsуказывает наТерминал Windows:
Новый Windows Terminal и оригинальный хост консоли Windows — все в одном месте!
Документации (пригодной для использования) нет, поэтому на ваш вопрос придется ответить, указав на исходный код.
Соответствующий фрагмент (который вы хотели бы реализовать) находится здесь, вwindowio.cpp
:
// handle shift-ins paste
if (inputKeyInfo.IsShiftOnly() && ShouldTakeOverKeyboardShortcuts())
{
if (!bKeyDown)
{
return;
}
else if (VirtualKeyCode == VK_INSERT && !(pSelection->IsInSelectingState() && pSelection->IsKeyboardMarkSelection()))
{
Clipboard::Instance().Paste();
return;
}
}
Половина условий (для достижения этого Paste()
) по всей видимости будет выполнена (за исключением некоторых случаев)ошибкав этой программе). Те, которые не очевидны:
ShouldTakeOverKeyboardShortcuts()
— но это используется вctrl+shift+плюс/минускодpSelection->IsKeyboardMarkSelection()
— мы предполагаем, что для выбора использовалась мышь.
Но это предполагает, что этот HandleKeyEvent
метод обрабатывает две разные последовательности клавиш одинаково. Это ^[[2;2~
происходит из другой части программы, в terminalInput.cpp
, используявстроенный стол
// Sequences to send when a modifier is pressed with any of these keys
// Basically, the 'm' will be replaced with a character indicating which
// modifier keys are pressed.
static constexpr std::array<TermKeyMap, 22> s_modifierKeyMapping{
// If a modifier key was pressed, then we need to try and send the modified sequence.
if (keyEvent.IsModifierPressed() && _searchWithModifier(keyEvent, senderFunc))
{
return true;
}
Из прочтения кода следует, что это всевверх по течениюиз windowio.cpp
логики, так что эта комбинация никогда не будет достигнута. Разработчики не предоставили способа переопределить или изменить это поведение.
Как предложено в комментарии @Rody-Oldenhuis:
Вы можете использоватьwsltty; это поддерживает Ctrl+Ins/Shift-Ins из коробки
(что произошло от слова mintty).
решение2
Если вы запускаете WSL с помощьюТерминал Windows, Shift-Insert работает по умолчанию для вставки. (И Ctrl-Insert также работает для копирования, как вы могли ожидать)
решение3
Не совсем понимаю, зачем использовать сочетание клавиш Shift+Insert для вставки или как его переназначить, но вставка по умолчанию так же проста, как щелчок правой кнопкой мыши.