Gil*_*il' 10
Bash 的剪贴板在 bash 内部,bash 不连接到 X 服务器。
M-w除了bash的内部剪贴板之外,您可以做的是更改将选择复制到X剪贴板¹的含义。然而 bash 的集成非常松散,我认为没有办法从 bash 代码访问区域信息或剪贴板。您可以进行键绑定以将整行复制到 X 剪贴板。²
if [[ -n $DISPLAY ]]; then
copy_line_to_x_clipboard () {
printf %s "$READLINE_LINE" | xsel -ib
}
bind -x '"\eW": copy_line_to_x_clipboard'
fi
Run Code Online (Sandbox Code Playgroud)
如果您想在 shell 中做一些花哨的事情,请切换到 zsh,它(除其他优点外)在行编辑器和脚本语言之间具有更好的集成。
if [[ -n $DISPLAY ]]; then
x-copy-region-as-kill () {
zle copy-region-as-kill
print -rn -- "$CUTBUFFER" | xsel -ib
}
x-kill-region () {
zle kill-region
print -rn -- "$CUTBUFFER" | xsel -ib
}
zle -N x-copy-region-as-kill
zle -N x-kill-region
bindkey '\C-w' x-kill-region
bindkey '\ew' x-copy-region-as-kill
fi
Run Code Online (Sandbox Code Playgroud)
¹
Gnome 没有专门的剪贴板,这对 X 来说是通用的。
²
从 bash 4.1 开始,键解析代码中存在一个错误:绑定的键序列bind -x长度不能超过两个字符。我认为 bash 4.2 修复了一些较长前缀的情况,但不是全部;我没有研究过细节。
@Gilles 已经给出了很好的答案。我只想提一下 的存在xclip,这也是将终端输出复制到 X 剪贴板的一种非常有用的方法,只需将任何内容输入其中即可:
$ cat /etc/passwd | xclip
Run Code Online (Sandbox Code Playgroud)