使用 shift-Insert 粘贴到 WSL 中

使用 shift-Insert 粘贴到 WSL 中
# 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 控制台中启动(除非您已采取措施启动第 3 方控制台/终端)。因此,请将 UI/UX 相关问题提交到Windows 控制台问题跟踪器。

但给定的链接Windows 控制台指着Windows 终端

新的 Windows 终端和原来的 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 的评论中所建议的:

您可以使用沃斯蒂;这支持开箱即用的 Ctrl+Ins/Shift-Ins

(源自薄荷)。

答案2

如果您使用运行 WSLWindows 终端, Shift-Insert 可以直接用于粘贴。 (正如您所料,Ctrl-Insert 也适用于复制)

答案3

不太清楚为什么要使用 shift+insert 来粘贴或如何重新映射它,但默认粘贴就像单击鼠标右键一样简单。

相关内容