Terminal: 复制和粘贴键绑定

创建于 2019-05-24  ·  60评论  ·  资料来源: microsoft/terminal

环境

Windows build number: 10.0.18362.86
Windows Terminal version (if applicable):

重现步骤

在标准Windows 10控制台中,您可以启用Ctrl + C / V进行复制和粘贴。 Windows Terminal没有此功能,这非常令人沮丧。

预期行为

启用将Ctrl + C用于复制,将Ctrl + V用于粘贴。

实际行为

Ctrl + C不会复制任何内容,而Ctrl + V只会在提示符下写入^ V。

Area-User Interface Help Wanted Issue-Task Needs-Tag-Fix Product-Terminal

最有用的评论

我喜欢WSL + Bash处理复制/粘贴的方式。 Ctrl + C仅在选择某些内容时复制。 如果未选择任何内容,则Ctrl + C会照常运行并发送SIGINT。

所有60条评论

这听起来像@ carlos-zamora的小巷

或者实际上,任何人都可以跳上这一步。 您想要在App.cpp中设置复制和粘贴操作(例如_Scroll ),以触发TermControl上的适当操作。 应该已经有复制和粘贴ShortcutActions,因此只需为它们注册默认值,然后将操作连接到绑定即可(请参阅HookupKeyBindings或App.cpp中的类似内容)。

我必须坚持为此默认绑定不是Ctrl+ -only。

啊,对不起。 我无意关闭此问题。

我必须坚持为此默认绑定不是Ctrl+ -only。

我知道您为什么这么说,这当然是为什么普通控制台将其设置为必须启用的设置的原因。 但是将它们置于Ctrl + Shift或类似位置之后会破坏目的。 正是肌肉记忆使这些按键绑定值得拥有。

对我而言,让Ctrl + V输入^V从来没有用过,我怀疑这对于很多人来说是正确的。 是否可以启用此设置?

也许我们需要特定于配置文件的键绑定。 现在,所有绑定都是可重新绑定的:smile:

我喜欢WSL + Bash处理复制/粘贴的方式。 Ctrl + C仅在选择某些内容时复制。 如果未选择任何内容,则Ctrl + C会照常运行并发送SIGINT。

@namatoj太完美了; 完全应该这样。

我想如果Ctrl-C / V / X可能有冲突,我们至少应该支持Ctrl-Insert / Shift-Insert / Shift-Delete?

IMO的选项应为:

  • “智能”的行为,其中CTRL-C是如果选择仅东西复制。
  • 自定义行为,其键绑定默认为CTRL-SHIFT-C / V。
  • 没有任何行为,可以在选择的右键菜单中进行复制。

所有有关“仅在选择了某些内容时才复制CTRL + C ”的讨论都忽略了CTRL + V-没有迹象表明我们应该粘贴,并且如果一个值高于其他所有值,则说“仅CTRL + C ”是有问题的X时有效,但CTRL + V始终有效”。 替代方法“ CTRL + C如果已选择, CTRL + SHIFT + V始终粘贴”也不是特别一致。

但是CTRL-C普遍是“发送SIGINT”,那里存在很大的歧义。 Ubuntu的终端通过使用CTRL-SHIFT-C / V进行复制/粘贴来解决此问题; MacOS终端通过使用CMD-C进行复制并使用CTRL-C进行中断来解决该问题。

CTRL-V没有这种冲突。 一些emacs用户可能将其绑定到事物,但是如果您有足够的emacs高级用户来重新绑定密钥,则无论如何您可能都将capslock用作元密钥。

我认为,使“智能”行为成为默认行为的主要风险是用户会因为错过选择而意外中断流程。 如果这是一个问题,或者我们希望保持一致,那么我想说就是复制Ubuntu并为CTRL-SHIFT-C / V设置默认绑定。

通过为每个配置文件实现自定义键绑定,这可以允许默认的Ubuntu键盘快捷键按应有的方式运行,或者允许用户更改它们以允许Windows剪贴板快捷键按应有的方式运行。

@mikepurvis在许多Windows终端中都可以正常使用Ctrl-C智能行为。 我喜欢https://github.com/Eugeny/terminus这样做的方式,它会闪烁一个简短的弹出窗口,指示文本已被复制或粘贴。

@mikepurvis在许多Windows终端中都可以正常使用Ctrl-C智能行为。 我喜欢https://github.com/Eugeny/terminus这样做的方式,它会闪烁一个简短的弹出窗口,指示文本已被复制或粘贴。

复制的工具提示会很好,尤其是在并非总是将Ctrl + C分配给复制的情况下

Gnome Terminal具有一致的键绑定,乍一看并不直观,但易于采用,并且与通常的CTRL + C不太相距很远。

CTRL + C :取消
Ctrl + Shift + C :复制
CTRL + Shift + V :粘贴

没有选择的逻辑,总是以特定的方式工作。 我认为这很完美。 由于此行为在LinuxMacOS上是一致的,因此也可以与其他OS协调。

确实,我不认为我们有任何借口,因为命令提示符使用Enter键进行复制,而右键单击则进行粘贴。

@NatoBoram可以选择。 但是许多人喜欢聪明的行为。 在Windows中的其他任何地方,Ctrl + C都是复制项,很难为一个应用程序调整行为,因此我想要智能行为。

另外,由于主持人也住在这里; 使用Ctrl+CCtrl+Shift+C获得的粘贴文本的效果具有不同的效果。

image

缓冲区的读取方式对于Ctrl+C aka智能行为快捷方式(即,以行结尾)而言是正确的。

所有类似terminal的应用都有此问题( CMDPowershellWLS -apps),并且由于它们背后的大脑都住在这里,所以我以为将其发布。

在Windows中的其他任何地方, Ctrl + C都是副本

在Linux和MacOS中。 Windows在这方面没有任何不同。

很难为一个应用程序调整行为

是的,这就是Microsoft决定使用Enter键进行复制和右键单击进行粘贴的好主意的原因。
*啊*
我的意思是,很难为一个操作系统调整行为。 🧂

对配置智能行为的选项进行另一次表决(即使问题已解决)。 我会为复制配置智能行为,并始终为粘贴配置CTRL+v 。 如果我突出显示了文本,并且想发送SIGINT,我希望先击ESC ,然后再击CTRL+c

同样在这里,我希望有一个选项可以使ctrl + v始终粘贴,而ctrl + c可以在选中时复制,而在没有选择时不复制SIGINT。 这是我目前在锥中的行为。

tada:此问题已在#1093中得到解决,现已成功发布为Windows Terminal Preview v0.3.2142.0 。:tada:

方便的链接:

issue此问题已在#1093中得到解决,现在已成功发布为Windows Terminal Preview v0.3.2142.0 🎉

方便的链接:

* [Release Notes](https://github.com/microsoft/terminal/releases/tag/v0.3.2142.0)

* [Store Download](https://www.microsoft.com/store/apps/9n0dx20hk701?cid=storebadge&ocid=badge)

添加这些键绑定就可以了

{
                "command" : "copy",
                "keys" : 
                [
                    "ctrl+shift+c"
                ]
},
{
                "command" : "paste",
                "keys" : [
                    "ctrl+shift+v"
                ]
}

怎么没人想到这样做腻子呢? 当前,整个用户群都在使用腻子或cygwin。 选择要复制,右键单击以粘贴。 没什么容易的。
编辑:删除了不礼貌的评论。 抱歉

没有人想到

您的意思是#524和#2152(这是团队成员之一的拉动请求?)

顺带一提,为什么粘贴用Ctrl+CCtrl+Shift+C复制的文本在powershell中似乎有不同的效果(上面在其中一条评论中有述,此处重复,🙈抱歉!)?

我个人更喜欢“哑巴”复制行为,即单独为它结合,而不是结合CTRL + C(通常SIGINT)被选中的东西时,复制,并与许多炮弹的默认行为搞乱。 当您尝试仅复制某些内容时,意外关闭正在前台运行的应用程序时,这可能会变得很烦人。 当前的实现很棒!

我添加了Ctrl + C(如果选中则复制并发送SIGINT)和Ctrl + V的绑定,它们的工作原理非常好,对我来说非常直观。

正如@aolchawa所说,添加

        {
            "command" : "copy",
            "keys" : 
            [
                "ctrl+c"
            ]
        },
        {
            "command" : "paste",
            "keys" : [
                "ctrl+v"
            ]
        }

键绑定导致上面定义的“智能”行为@mikepurvis
我现在还不完全了解终端如何在SIGINT和Ctrl + C之间进行选择,我看不到#1093的变化,它定义了这一点,我在第46行看到我们现在将trimWhitespace传递给CopyTextEventArgs
我认为这一定是导致期望的行为(对我而言)的变化的一部分。
在profiles.json或配置文件模式中似乎没有配置可用于切换行为。

无论如何,这是_I_在寻找的行为; 希望我在这里的闲逛可以节省一些时间,仔细研究PR来了解发生的事情。

@ltomes因此,使Terminal在SIGINT和Ctrl + C之间进行选择的更改实际上是#2446。 现在,标题有点误导了:它真正实现的是“如果一个绑定操作说它什么也没做(或未处理),请让终端机再处理一下”。 :微笑:

感谢您的跟进/解释@ DHowett-MSFT! 现在看到这种变化,我感到更加理智,我以为我要疲于奔命了。 🤣

感谢您的按键绑定。
现在,Windows Terminal的工作方式类似于Windows cmd。 :)(实际上让我惊讶的是它不像默认的Windows cmd一样工作)

Gnome Terminal具有一致的键绑定,乍一看并不直观,但易于采用,并且与通常的CTRL + C不太相距很远。

CTRL + C:取消
Ctrl + Shift + C:复制
CTRL + Shift + V:粘贴

没有选择的逻辑,总是以特定的方式工作。 我认为这很完美。 由于此行为在LinuxMacOS上是一致的,因此也可以与其他OS协调。

确实,我不认为我们有任何借口,因为命令提示符使用Enter键进行复制,而右键单击则进行粘贴。

我总是优先使用Gnome Terminal来代替使用CTRL + C / CTRL + V。 与整个系统的其余部分相比,使用一个单独的应用程序对复制/粘贴使用不同的绑定对我来说是非常恼火的。

通过手动添加键绑定的解决方法是有帮助的,但我们可以将其称为“锹”:在复制粘贴功能无处不在的默认键绑定之前,该问题无法解决。 当然哪个应该可以被覆盖。 并且应确定记录在案。

Ctrl + Insert注册为;5~和Shift + Insert注册为;2~并因此不能用作复制/粘贴的键绑定有任何特殊原因吗?

我只是喜欢这些键,不明白为什么它不起作用

@darthcabs您介意共享您的配置文件吗? 我唯一想到的是您可能在使用弦绑定而不是单个绑定:

弦绑定(这将不起作用,并且当它起作用时将没有预期的效果)

"keybindings": [
    { "command": "copy", "keys": ["ctrl+shift+c", "shift+ins"] }
]

个人绑定(这应该起作用;#3324提出了我们无法复制的问题)

"keybindings": [
    { "command": "copy", "keys": ["ctrl+shift+c"] },
    { "command": "copy", "keys": ["shift+ins"] }
]

@ DHowett-MSFT当我发现问题出在哪里时,我正在回复您...在笔记本电脑的键盘中,INS键与F12键相同。

在我尝试通过按FN + F12键入INS之前,但事实证明,将Terminal中的复制/粘贴分别映射到ctrl + f12 / shift + f12更加容易。

非常感谢您的启发,哈哈!

@darthcabs您介意共享您的配置文件吗? 我唯一想到的是您可能在使用弦绑定而不是单个绑定:

弦绑定(这将不起作用,并且当它起作用时将没有预期的效果)

"keybindings": [
  { "command": "copy", "keys": ["ctrl+shift+c", "shift+ins"] }
]

个人绑定(这应该起作用;#3324提出了我们无法复制的问题)

"keybindings": [
  { "command": "copy", "keys": ["ctrl+shift+c"] },
  { "command": "copy", "keys": ["shift+ins"] }
]

对我来说,有效的方法是shift+insert ,而不是shift+ins -在此处发布以防万一。

如我们所见,这是一个经常发生的问题,因为它不直观。 参见https://github.com/ayugioh2003/today-i-learned/issues/281

Ctrl + C,Ctrl + V应该“正常工作”,并且没有办法解决。 用户已经做出(并继续这样做)他们的判决。

并且作为新的命令行工具(不是此工具)可以“正确”运行,即。 不出所料,这一点也应该如此。 如果您的开发人员喜欢其他情况,请将其添加为设置,并将流行行为设为默认设置。

感谢您在这里的投入。 谢谢! 仅强调以下几点:

  • 今天是环境! 这些键绑定可以在profiles.json
  • 初步了解已自定义其个人资料的用户的情况表明,只有不到1%的终端用户绑定了ctrl + c / v。 似乎已将流行行为设置为默认行为。

但这是假设人们知道如何更改它。 请原谅我的举止。

一个更有意义的指标是按下Ctrl + V的东西有多少
在他们的剪贴板中,然后得到^ V,然后将其删除,或者简单地以
退出应用程序...

Den Tors 2020年3月19日02:31 Dustin L.Howett(MSFT) [email protected]
skrev:

对于从Google登陆此线程的任何人:默认的绑定是Ctrl+Shift+CCtrl+Shift+V 。 我在设置中没有找到这些,所以不确定默认值是什么。

此外,我在这里看不到讨论的内容,但我认为值得一提:输入要复制,然后单击鼠标右键以粘贴也不起作用。

从具有3个键或鼠标单击+键的组合的可访问性的角度来看,如果不是一只手或其他功能受限的人不是不可能的话,这将非常困难。 这是为什么我不能使用emacs并坚持使用vi / vim的重要原因。

在过去的20年中,Linux / Xwindows中的默认行为是最易访问的。 双击以选择一个单词,三次单击该行,然后右键单击粘贴。 这似乎可以在“终端”框架内工作,但不能可靠地填充剪贴板。 注意-ConEmu具有此功能-我可以在终端中选择文本,并填充剪贴板。

@ DHowett-MSFT,我也一直不明白为什么复制/粘贴不像Windows或Linux上的所有其他终端一样起作用(这是在进行一些搜索后导致我遇到这个github问题的原因)。 我认为人们不喜欢此设置,他们只是不知道如何更改它,也不喜欢编辑键绑定文件。

不能像Windows或Linux上的所有其他终端一样工作

考虑到终端的当前默认行为(Ctrl-Shift-C / V)与Ubuntu上的默认终端完全匹配,这有点戏剧性。

这是一个更高层次的问题。 我们应该为谁优化? 显然不是
Windows用户...

Den Tors 4月9日。 2020 19:08迈克·普维斯(Mike Purvis) [email protected] skrev:

我只是说,抓住我们的珍珠并声称终端团队在这里打错电话是不公平的,因为它不同于“ Windows或Linux上的所有其他终端”,而Windows上的所有其他终端都是第三方。并且这里的团队已将领先的Linux发行版自从永久以来所做的默认设置为_。

而且在Mac OS上也不是问题的唯一原因是该系统上的cmd和ctrl恰好是单独的按钮。

所有的公平点,麦克,但让我们面对现实吧,大多数Windows用户都不知道
如何在此终端中粘贴。

这是我唯一的问题。 不仅是我的,还有很多人,很多人
精通Windows,但完全没有使用Linux的经验,并且
没有人知道有多少个问题。 我们要这些人吗
使用终端还是将其视为功能不完整?

如果我们对当前的状况感到满意,那么至少,
我们来衡量有多少尝试粘贴但不能尝试粘贴。

如果我们不想对此进行遥测,那么一个小计数器以及何时
您在3分钟内尝试了3次,显示带有以下链接的通知
这个问题。

...我在开玩笑,说明如何进行更改。

Den Tors 4月9日。 2020 19:57迈克·普维斯(Mike Purvis) [email protected] skrev:

为了遥测,我今天才下载并构建了这个终端,这是我迄今为止唯一的主要抱怨。 在“首选项”中有一个选项向我指示Ctrl-C / V应该可以工作,但显然不能。 请启用上面提到的“ Smart Ctrl-C”功能,这是我从第一时间就对CMD投诉#1。 :)

我想指出的是,我在搜索Windows终端如何实现复制粘贴时发现了这个问题。 我从同时使用Linux和Windows的开发人员那里听到的最大抱怨之一就是Windows复制/粘贴与所安装的任何第三方Shell以及Linux之间的不一致。 几乎每个Linux发行版/终端都使用ctrl+shift+c/v ,因此我很高兴Windows Terminal也将其设置为默认值。

为什么不同时拥有Ctrl + C / VCtrl + Shift + C / V?

@ bjorn-ali-goransson实际上,我们只是将默认设置文件更改为包含这两个文件,因此用户可以根据需要轻松选择退出Ctrl + C / Ctrl + V。

参见此PR和#5187

  • 似乎已将流行行为设置为默认行为。

废话。 这意味着人们放弃尝试修复它,或者不知道它可以修复。

这就是我现在一直在这个线程上的原因。

@soilstack谢谢。 考虑阅读此线程上的最新消息。

令我惊讶的是,你们不知道如何制作出像这项工作一样重要的东西! 这是一笔大买卖。 我喜欢关于终端应用程序的所有其他内容,但是每次使用它时,这个基本缺陷都会使我失望。

@SteveIves您知道可以将键绑定更改为所需的键,对吗? 如果要将Ctrl + C / V作为复制粘贴,请继续并将其添加到Ctrl + Shift + C / V ,也可以使用它们。 如果您想将alt + q复制并把shift + 0复制为粘贴,请选择它。

从1.0开始,默认值包括Ctrl + Shift + C / V作为复制粘贴,新用户也将在其设置文件中也将Ctrl + C / V作为复制/粘贴。

编辑:使用您想要的任何子集:

{
  "keybindings": [
    // Ctrl+C / Ctrl+V for copy paste
    { "keys": "ctrl+c", "command": "copy"},
    { "keys": "ctrl+v", "command": "paste"},

    // Ctrl+Shift+C / Ctrl+Shift+V for copy paste
    { "keys": "ctrl+shift+c", "command": "copy"},
    { "keys": "ctrl+shift+v", "command": "paste"},


    // Disable Ctrl+Shift+C / Ctrl+Shift+V for copy paste
    { "keys": "ctrl+shift+c", "command": "unbound"},
    { "keys": "ctrl+shift+v", "command": "unbound"},
  ]
}

@ zadjii-msft是的,我知道这一点,作为开发人员,我可以做到这一点。 但是,如果要终端替换cmd.exe,则需要修复此问题。

出于好奇,

从1.0开始,默认值包括Ctrl + Shift + C / V作为复制粘贴,新用户也将在其设置文件中也将Ctrl + C / V作为复制/粘贴。

我们不解决这个问题吗?

Ctrl + Shift + C / V是不自然的。 还不是右键菜单? 我发现Windows终端很有用,但是缺少菜单和Ctrl + C / V使我不得不重新考虑选项。

是的,该线程已运行。 任何愿意发表评论的人:请阅读最新的四个评论。 它说了所有您需要知道的。

此页面是否有帮助?
0 / 5 - 0 等级