有几种方法。已经提到的一些方法包括(我认为)tmux,screen,vim,emacs和shell。我不知道emacs或屏幕,所以我将介绍其他三个。
Tmux
虽然不是X选择,但tmux具有可通过prefix-[
(默认prefix
为Ctrl+ B)访问的复制模式。这种模式下使用的缓冲区是tmux所独有的,这为tmux提供了很多可能性,并使其在正确的情况下比X选择更具通用性。
要退出此模式,请点击q;要进行导航,请使用vim
或emacs
绑定(默认= vim),以便hjkl
进行移动,v/V/C-v
选择字符/行/块等。选择后,请单击Enter以复制并退出该模式。
要从此缓冲区粘贴,请使用prefix-]
。
贝壳
X11
默认情况下,任何安装的似乎都附带两个程序:xclip
和xsel
(有点像startx
和和一起附带xinit
)。其他大多数答案都提到了xclip
,我非常喜欢xsel
它的简洁性,因此我将介绍xsel
。
从xsel(1x):
输入选项
-a,-追加
将标准输入附加到选择中。意味着-i。
-f,-关注
随着标准输入的增加而追加到选择。意味着-i。
-i,-输入
将标准输入读取到选择中。
输出选项
-o,-输出
将选择内容写入标准输出。
动作选项
-c,-清除
清除选择。覆盖所有输入选项。
-d,-删除
请求删除当前选择。这不仅清除选择,而且还向选择所在的程序请求删除选择的内容。覆盖所有输入选项。
选择选项
-p,--primary
对PRIMARY选择进行操作(默认)。
-s,--secondary
对SECONDARY选项进行操作。
-b,-剪贴板
在CLIPBOARD选项上进行操作。
这就是您需要了解的所有内容。p
(或不执行)for PRIMARY
,s
for SECONDARY
,b
for CLIPBOARD
,o
输出。
示例:说我想复制foo
TTY 的输出并将其粘贴到网页以获取错误报告。为此,复制到TTY / X会话或从TTY / X会话复制是理想的。因此,问题就变成了如何从TTY访问剪贴板?
对于此示例,我们假设X会话正在显示:1
。
$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1
然后,我可以Ctrl-V
像往常一样将其转换为表格。
现在说,支持站点上的某人给了我一个命令来运行以解决问题。它很复杂而且很长。
$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99
订购比萨饼似乎可以有效地使用命令行。
...继续。
Vim
如果使用+clipboard
(这很重要!请检查vim --version
)进行编译,则Vim应该可以访问X PRIMARY
和CLIPBOARD
选择。可以从*
和+
分别访问这两个选择,并且可以像其他任何寄存器一样随意写入和读取。例如:
:%y+ ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example
但是,如果您的vim副本不直接支持对X选择的访问,那就不是世界末日了。您可以只使用xsel
上一节中描述的技术。
:r ! xsel -bo ; read (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b ; write (w) to the stdin of (!) `xsel -b`
绑定几个键连击,您应该会很好。
:%y+
在vim中使用,这是vim所说的“将所有行都提取(复制)到'+'寄存器(XPRIMARY
剪贴板)中”。%
如果要具体说明,可以用范围代替。但是有三个警告:1.现在,您必须将任何文本保存到文件中,然后才能将其复制。这xclip
与答案中提到的命令相反。2.如果您还不知道如何vim,这可能很乏味。3.只有在编译vim时启用了某些功能时,才能执行此操作。如果安装了GVim,则默认情况下应在GUI和vim的终端实例中将其启用。