有一个相关的答案(下面的链接),但这需要设置标记。Ctrl+U工作方式不同。\Cu
或者\C-u
不能只是替换\eW
(下面的代码)。
这是什么在 bash 和 X11 之间共享剪贴板建议。
if [[ -n $DISPLAY ]]; then
copy_line_to_x_clipboard () {
printf %s "$READLINE_LINE" | xsel -ib
}
bind -x '"\eW": copy_line_to_x_clipboard'
fi
所以问题是:如何在 bash 中添加Ctrl+U将其剪切到 Xorg 的鼠标(中键单击)粘贴缓冲区的文本?
答案1
您的函数会将行复制到剪贴板。
要使用鼠标粘贴缓冲区而不是 Ctrl+C/Ctrl+V 剪贴板,请xsel
在不使用该-b
选项的情况下运行。
要剪切而不是复制,请随后删除文本:设置READLINE_LINE
为空字符串。
Bash 提供的终端设置stty
优先于它自己的键绑定。我猜其目的主要是遵守终端的设置BackSpace 是否发送^H
或^?
,但更一般地说,这意味着默认情况下不会使用bash 列出的所有字符stty -a
(即^C
、^D
、^H
、^Q
、^S
、^W
、^Z
和)的键绑定。您需要取消要重新绑定的控制字符的 stty 设置。^\
^?
~/.bashrc
这对我来说适用于 Ubuntu 16.04 上的 bash 4.3 中的以下代码。
if [[ -n $DISPLAY ]]; then
stty kill ''
copy_line_to_x_clipboard() {
printf %s "$READLINE_LINE" | xsel -i;
READLINE_LINE= READLINE_POINT=0
};
bind -x '"\C-u": copy_line_to_x_clipboard';
fi
如果我只是将其粘贴到命令行中,它就不起作用:我得到了您在评论中提到的效果,即按^U
inserts aliteral ^U
。如果我运行stty kill ''
, 然后bind -x …
在后续命令中运行,它就会起作用。