我注意到 tmux 复制管道截断选择(省略了选择的最后一部分)。
例如:
bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip -in -sel clipboard"
有时仅将前几个 100 个字节复制到缓冲区中。
我不认为这是一个问题,xclip
因为这种情况也发生过xsel
。
由于某种原因,管道进入文件,休眠,然后传递给 xclip 可以工作。
bind-key -T copy-mode-vi y \
send-keys -X copy-pipe "cat > /tmp/tmux_clip.txt" \; \
run "sleep 0.1" \; \
run -b "xclip -in -sel clipboard /tmp/tmux_clip.txt > /dev/null" \; \
display "Clipboard Copy"
这是一个已知的问题?有办法解决这个问题吗?
答案1
如果您将set-clipboard
选项设置为on
或external
(默认)并且您的终端支持 OSC 52,那么copy-pipe
还将使用 xterm 转义序列将复制的数据发送到您的 tty 来设置选择。 tmux 正确发送整个复制的文本,但您的终端可能有一个有限大小的缓冲区来接收数据。这在tmux#1119。
有时它可能会起作用,因为对的调用xclip
被放在后台,并且可能会在内置剪贴板设置操作之后完成。此外,如果您更新了终端并实现了 OSC 52 支持(例如活泼)。
您的选择是:
- 添加
set-option -g set-clipboard off
到您的 tmux 配置 - 如果可能的话,在终端中设置更高的缓冲区大小限制(或提出问题)并
copy-pipe
完全放弃
关键字:tmux 剪贴板被截断、tmux 不复制所有字符、tmux 复制被截断
答案2
我已经开始看到同样的问题,但没有很好的解释为什么。然而,建议的 tmux >= 2.5 解决方案超过https://unix.stackexchange.com/a/131187/44909为我解决了这个问题。具体来说,让你.tmux.conf
有:
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
这-and-cancel
一点似乎是有什么作用。如果我只是使用copy-pipe
它是行不通的。