我tmux
根据 README 中的说明从源代码编译了 3.1-rc4(因为 Debian 9tmux
是较旧的 2.3):
./configure --prefix=/usr/local/tmux31
make
make install
tmux
我在konsole
Debian 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)!
但仍然奇怪的是,如果我将光标保持在右窗格中并在左窗格中选择文本,则行为是“正确的”,因为它将选择复制到剪贴板并且选择立即消失。
这可能只是tmux
RC 版本中的一个 Bug 吗?
更新 3
抱歉,造成了这么多困惑。我想我终于发现了真正的问题所在。我没有注意到我到底在哪里释放了鼠标左键。
最好在屏幕截图上查看。只剩set -g mouse on
下.tmux.conf
。
当我开始选择文本时正确的窗格中并释放鼠标按钮左边窗格:
当我开始选择文本时正确的窗格中并释放鼠标按钮正确的窗格:
当我开始选择文本时左边窗格并释放鼠标按钮左边的窗户外面:
当我开始选择左边窗格中并释放鼠标按钮正确的窗格:
因此,看起来,当用鼠标光标选择文本时,它穿过了划分窗格的垂直“文本”栏,从而导致了这种行为(文本选择一直持续到按下 Enter 键)。
答案1
这很奇怪。
您的终端有多大?有些终端不支持超过 223 列的鼠标。它是否适用于较小的终端(例如 80x24)或 xterm?
/dev/null
如果将 xclip 的标准输出重定向到( xclip -in -selection clipboard >/dev/null
) ,会有什么不同吗?