tmux 3.1,用鼠标在窗格内复制和粘贴文本(Linux,konsole)

tmux 3.1,用鼠标在窗格内复制和粘贴文本(Linux,konsole)

tmux根据 README 中的说明从源代码编译了 3.1-rc4(因为 Debian 9tmux是较旧的 2.3):

./configure --prefix=/usr/local/tmux31
make
make install

tmux我在konsoleDebian 9.3、KDE ​​上使用。我的.tmux.conf

# remap prefix to Control + a
set -g prefix C-a
# bind-key 'C-a C-a' to type 'C-a'
bind-key C-a send-prefix
unbind-key C-b

bind-key -n 'M-Left' select-pane -L
bind-key -n 'M-Down' select-pane -D
bind-key -n 'M-Up' select-pane -U
bind-key -n 'M-Right' select-pane -R

set-option default-terminal tmux

# Linux only
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -T copy-mode-vi    C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-vi    C-WheelDownPane send-keys -X halfpage-down
bind -T copy-mode-emacs C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-emacs C-WheelDownPane send-keys -X halfpage-down

# To copy, left click and drag to highlight text in yellow, 
# once you release left click yellow text will disappear and will automatically be available in clibboard
# # Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -selection c"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

现在,使用鼠标复制到系统剪贴板并在一个窗格内几乎有效。当我有两个垂直窗格(左侧和右侧)时:

  • 在选择文本时左边窗格,一旦我选择文本后释放鼠标左键,(棕色)选择就会消失,并且文本会被复制到系统剪贴板中。

  • 在选择文本时正确的窗格,一旦我释放鼠标左键,选择继续我必须按下Enter才能将所选内容成功复制到系统剪贴板。按下 Enter 后,(褐色)所选内容消失。

更新

tmux大窗口中的行为与以前相同。80x24窗口xterm也是如此。xterm

当我将konsole窗口大小调整为 80x24 时,行为也与以前相同。

我已经检查TERM开始时tmux,它对行为xterm-256color仍然没有影响tmux

奇怪的是,用set-option default-terminal除此以外的其他方式设置默认终端tmux没有效果,tmux无论我设置什么,它总是这样。

设置提示xclip:重定向到/dev/null没有任何效果!事实上,如果我注释掉使用 的整个命令xclip,行为仍然保持不变。

#bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -selection c >/dev/null"
#bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard >/dev/null"

更新2

好的,我只留下了,set -g mouse on并且.tmux.conf行为与以前相同(即“错误”)。

我发现了引发“错误”行为的原因:将文本光标留在左侧窗格中

我从任一窗格复制文本,而没有将文本光标移动到右侧窗格。如果我将文本光标移动到右侧窗格,则行为是正确的(即选择复制并消失,无需按 Enter)!

但仍然奇怪的是,如果我将光标保持在右窗格中并在左窗格中选择文本,则行为是“正确的”,因为它将选择复制到剪贴板并且选择立即消失。

这可能只是tmuxRC 版本中的一个 Bug 吗?

更新 3

抱歉,造成了这么多困惑。我想我终于发现了真正的问题所在。我没有注意到我到底在哪里释放了鼠标左键。

最好在屏幕截图上查看。只剩set -g mouse on.tmux.conf

当我开始选择文本时正确的窗格中并释放鼠标按钮左边窗格:

在右侧窗格中复制

当我开始选择文本时正确的窗格中并释放鼠标按钮正确的窗格:

在此处输入图片描述

当我开始选择文本时左边窗格并释放鼠标按钮左边的窗户外面

在此处输入图片描述

当我开始选择左边窗格中并释放鼠标按钮正确的窗格:

在此处输入图片描述

因此,看起来,当用鼠标光标选择文本时,它穿过了划分窗格的垂直“文本”栏,从而导致了这种行为(文本选择一直持续到按下 Enter 键)。

答案1

这很奇怪。

您的终端有多大?有些终端不支持超过 223 列的鼠标。它是否适用于较小的终端(例如 80x24)或 xterm?

/dev/null如果将 xclip 的标准输出重定向到( xclip -in -selection clipboard >/dev/null) ,会有什么不同吗?

相关内容