用于粘贴主要选择的键盘快捷键


40

是否有用于粘贴主要选择的标准或常规键盘快捷键?

我想选择一些文本并转到另一个应用程序进行粘贴,而不会破坏我的剪贴板内容。我宁愿将手指放在键盘上,也不愿移至鼠标,找到指针,将其放置在所需位置并单击鼠标中键。

如果没有常规的方法,或者它是特定于应用程序且不受许多人支持的,是否有解决方法可以使它在全球范围内工作?(或者至少在更多应用程序中。)



FWIW,您可以使用shift-insert从键盘上粘贴主要选择(即,不使用鼠标按钮),并使用ctrl-insert / ctrl-shift-insert复制/粘贴剪贴板选择
Jonathan Hartley

@JonathanHartley对我来说,从剪贴板中插入粘贴不是主要选择
jberryman

Answers:


32

发送虚拟按键对我不起作用(请参阅评论),但是这个答案启发了我寻找类似的解决方案。发送带有的“文本”事件会xvkbd忽略物理键盘的当前状态:

sh -c 'xsel | xvkbd -xsendevent -file - 2>/dev/null'

xvkbd -text使用了几个反斜杠序列,因此与其逃避跳舞,不如说是-file有效的。 xvkbd还会输出一些有关修饰符的警告文本,但似乎与这种用法无关(但我不想在中看到它~/.xsession-errors)。

我使用系统>首选项>键盘快捷键将其绑定到快捷方式

请注意,您需要安装xsel和xvkbd软件包:

sudo apt-get install xsel xvkbd

3
神圣的香蕉!有用!棒极了。Ubuntu应该默认设置。
埃里克·约翰逊

8
对我来说,sh -c 'xsel | xvkbd -file - 2>/dev/null'工作,-xsendevent必须下手才能使其正常工作。
2012年

顺便说一句,我不得不将此命令分配给单个按键快捷方式(幸运的是,我的ThinkPad按钮在Thinkpad上没有执行任何操作-ctrl + alt + v行为异常,仅粘贴了其中的一部分xsel)。
2012年

2
除两个问题外,这非常有效。(1)我使用一个已设置为隐藏焦点的下拉终端(Guake)。运行此脚本会将焦点暂时从终端移开,从而使其隐藏。(2)它不能很好地处理UTF-8字符双字节字符。例如,如果我选择“éòü”,则使用脚本打印“éòü”。
Sparhawk

2
看来第二个错误在xvkbdxsel在主选择中与“éòü”一起使用时效果很好,但xvkbd由于上述脚本而失败。(并且也失败了xvkbd -text "éòü",尽管这里什么也没打印出来。)
Sparhawk

7

您可以结合使用程序xdotool单击以安装)和 xsel单击以安装)来获得此功能 。

xdotool可以模拟输入窗口;xsel输出PRIMARY选择的内容(默认);下面的一个壳线可以解决这个问题:

 xdotool type `xsel`

要使用System-> Preferences-> Keyboard快捷方式菜单项将此键绑定到任何键,必须将其包装在Shell调用中:

 sh -c 'xdotool type --clearmodifiers -- "`xsel`"'

输入xdotool将不适用于某些程序。请参阅xdotool文档中的注释


除非活动文本框和光标位置在该确切位置上,否则那是行不通的,当然也不会。实际上,如果算上窗口管理器边界,那将执行我的“单击窗口标题的中键”操作,这是完全不同的。

@Roger谢谢,更正了文本。我很好奇是否有更好的方法可以做到这一点:我本人一直在寻找“粘贴”键……
Riccardo Murri 2010年

好吧,我很感谢您的努力,但这仍然行不通。如果我想担心鼠标的位置,则只需要首先使用鼠标即可。:)

@Roger:第二次正确了:xdotool + xsel做到了。(嗯,至少对我
有用

2
需要--clearmodifiers选项,否则在释放键盘快捷键和执行xdotool之间会有竞争。此选项未更新10.04仓库中的xdotool,我必须自己下载并构建它。但是,--clearmodifiers似乎会奇怪地影响这些修饰符,并且最终我不知道如何使xdotool用于我的键盘快捷方式(尽管它对于虚拟键入文本非常有用)。


2

调用xdotool click --clearmodifiers 2模拟单击鼠标中键。这比使用xsel更好(至少对我而言)。在键入之前,您必须完全定位鼠标。


2

另一个xdotool建议在Debian Jessie 8.7(2017年1月)中运行:

xdotool click --delay 0 --clearmodifiers 2
  • 与xvkbd不同,xdotool处理多字节字符串(pe UTF-8)。
  • xdotool click模拟实际点击,因此您无需点击即可粘贴到鼠标位置,就像使用xdotool type或xvkbd一样。

唯一的问题是--clearmodifiers在模拟点击后会“按下”您使用的所有修饰符(Ctrl / Alt / Shift / Meta)。即使使用--delay 0(而不是12ms),该命令也需要一点时间来执行。如果在结束之前释放键,则修饰符将再次被“按下”,并停留在那里,直到您再次按下并释放实际键为止。

因此,如果使用任何修改器,则必须有点“慢”(50毫秒?)来释放修改器。

您可以通过设置键盘快捷方式,将其用于文本编辑器,然后按一个键(如a或箭头)来测试它。该字母应小写。如果发生其他情况,则表示速度太快,并且修饰符被卡住(如果使用大写字母,请按住Shift键;如果选择了所有文本,则按Ctrl;如果打开菜单,则按Alt键)。再次按下并释放您的修改器以将其重置。

如果速度太快,可以使用ilkerk的建议:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

然后,您必须在不到 300毫秒的时间内释放它们,并等待半秒钟以使文本出现。

同样,使用xdotool type意味着您可以像在键入文字时一样在文本光标位置而不是鼠标指针处插入文本。您可以将其更改为click更喜欢通常的单击中键行为。

(发布此帖子是为了使新来者不必重新拼凑在评论中散布的拼图)


现在可以在Arch Linux中为我工作
MountainX

1

我曾与该问题的解决,模拟粘贴PRIMARY选择,所以不是我添加了一个快捷方式,复制PRIMARY选择的CLIPBOARD。用我的快捷方式后,我贴CLIPBOARD在通常的方式,与Ctrl+VCtrl+Shift+VShift+Insert,根据不同的应用。

PRIMARY所选内容复制到的命令CLIPBOARD

sh -c 'xsel --output --primary | xsel --input --cliboard'

我绑定到Ctrl+InsertGnome快捷方式设置下的(任意选择)System Settings -> Devices -> Keyboard

其他解决方案问题的摘要:我尝试了xsel | xvkbd ...xsel | xdotool ...解决方案,但发现它们不能很好地工作,因为它们模拟了逐个字符地键入PRIMARY选择字符,这与通过单击中键粘贴选择符不同。问题包括:大选择一次插入一个字符会产生较长的延迟;如果要撤消“粘贴”,则必须逐个字符撤消,这很慢;如果您使用的是“死键”,那么一切都会变得混乱,例如“粘贴” "e产生ë;在xvkdb不能正确处理Unicode字符。

警告:此解决方案将覆盖现有CLIPBOARD内容,但是OP要求保留现有CLIPBOARD内容的解决方案。


是否保存原始剪贴板内容并随后再次设置?还是将原始剪贴板内容丢弃,从而使问题的“ 粘贴而不丢弃我的剪贴板内容 ” 失败了?
Xen2050

@ Xen2050是的,这会浪费剪贴板。我将在答案中添加注释。
ntc2

0

我遇到了同样的问题,互联网搜索并没有太大帮助。如OP所述,模拟点击2的问题很烦人。

上述xdotool与xsel 有关的问题是,当xdotool开始“键入”时,您仍在按另一个键。这并不总是导致任何输出。例如,如果将其绑定到“插入”键,则xdotool在手指按下“插入”键的同时发送键,这不会产生任何结果。

以下是一种解决方法,可以将其绑定到按键:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

它不是完美的,但可以工作。现在您有0.3秒的时间来完成对按键(和向上键)的选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.