tmux 复制管道截断选择

tmux 复制管道截断选择

我注意到 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选项设置为onexternal(默认)并且您的终端支持 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它是行不通的。

相关内容