有几种方法。已经提到的一些方法包括(我认为)tmux、Screen、Vim、Emacs 和 shell。我不了解 Emacs 或 Screen,所以我将介绍其他三个。
Tmux
虽然不是 X 选择,但 tmux 具有可通过 prefix-[ 访问的复制模式(prefix 默认为 Ctrl + B)。用于此模式的缓冲区是 tmux 的独立和专有的,这开辟了很多可能性,并且在适当的情况下使其比 X 选择更通用。
要退出这个模式,点击Q;导航,使用你的 Vim 或 Emacs 绑定(默认 = Vim),所以hjkl 用于移动,v/V/C-v 用于字符/行/块选择等。当您选择时,点击 Enter复制并退出模式。
要从此缓冲区粘贴,请使用prefix-]。
外壳
默认情况下,X11 的任何安装似乎都附带两个程序:xclip 和 xsel(有点像它同时附带 startx 和 xinit)。大多数其他答案都提到了xclip,我真的很喜欢xsel,因为它简洁,所以我将介绍xsel。
来自xsel(1x):
输入选项\
-a, --append \
将标准输入附加到选择中。暗示 -i。
-f, --follow \
随着标准输入的增长附加到选择。暗示 -i。
-i, --输入\
将标准输入读入选择。
输出选项\
-o, --输出\
将选择写入标准输出。
操作选项\
-c, --clear \
清除选择。覆盖所有输入选项。
-d, --delete \
请求删除当前选择。这不仅清除了选择,而且还向选择所在的程序请求删除选择的内容。覆盖所有输入选项。
选择选项\
-p, --primary \
对 PRIMARY 选择进行操作(默认)。
-s,--二级\
对 SECONDARY 选择进行操作。
-b, --剪贴板\
对剪贴板选择进行操作。
这就是您需要知道的全部内容。 p(或无)用于PRIMARY,s 用于SECONDARY,b 用于CLIPBOARD,o 用于输出。
示例:假设我想从 TTY 复制 foo 的输出并将其粘贴到网页以获取错误报告。为此,理想的做法是复制到 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
Pizza ordering 似乎是对命令行的有效使用。
...继续前进。
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`
绑定几个键组合,你应该很好。