使用 ctrl-prefix ctrl-y 时 tmux 冻结

使用 ctrl-prefix ctrl-y 时 tmux 冻结

我正在使用自定义的 .tmux.conf 文件,它如下所示:

unbind-key C-b
set -g prefix C-a
bind-key C-a send-prefix

set-window-option -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

## CLIPBOARD selection integration
# Requires prefix key before the command key
# Copy tmux paste buffer to CLIPBOARD
bind C-y run "tmux show-buffer | xclip -i -selection clipboard"
# Copy CLIPBOARD to tmux paste buffer and paste tmux paste buffer
bind C-p run "tmux set-buffer -- \"$(xclip -o -selection clipboard)\"; tmux paste-buffer"

我正在使用ctrl+ a ctrl+y将 tmux 复制缓冲区复制到剪贴板。但每次我这样做时,tmux 都会冻结并且不接受任何输入。我尝试使用ctrl+ q,但这没有帮助。

我该怎么做才能防止 tmux 冻结,哪些快捷方式会干扰这里? 我也尝试了快捷方式ctrl+ a ctrl+ c,这里也有同样的问题。

答案1

如果你xclip在命令行中输入该命令,你会发现它没有完成。这是因为它继续接受输入,直到标准输入就完成了。因此,标准输出永远不会关闭。您可以通过重定向标准输出xclip/dev/null例如:

bind y run "tmux save-buffer - | xclip -selection clipboard &>/dev/null"

在此示例中,我重定向标准错误以防万一。

答案2

xclip正在等待输入,这会阻止 tmux 接收输入。以下示例允许 xclip 在另一个 shell 中运行,而不会阻止您的 tmux 会话:

bind y run-shell -b "tmux save-buffer - | xclip -selection clipboard"

我甚至会添加一条消息来帮助您的工作流程:

bind y run-shell -b "tmux save-buffer - | xclip -selection clipboard; tmux display-message \"Tmux buffer saved to clipboard\" "

我希望这有帮助!

答案3

bind y run-shell -b "cat << EOF | tmux save-buffer - | xclip -sel clipboard &>/dev/null"

您可以按照以下方式操作,使用 xclip 将 EOF 复制到剪贴板后关闭缓冲区。

相关内容