tmux鼠标复制模式跳到底部

40

我正在ssh会话中使用tmux。

我使用多个窗格和窗口。

我启用了鼠标模式,目前效果很好。

当我选择文本时,它会自动复制到tmux缓冲区,并且窗口会跳到结尾。 所以,如果我向上滚动并点击某些内容,它会跳到结尾... 当我在窗格之间切换时,会触发复制命令,输出会到达结尾。 我真的不喜欢这种行为,我宁愿按下按钮进行复制,或者点击q完成复制模式。

是否可以禁用鼠标按钮释放时的自动复制/自动跳转到结尾?

我在客户端的Terminator上通过ssh在服务器上运行tmux 2.0。

# config                                                                        
#{{{                                                                            
                                                                                
# 0 is too far from ` ;)                                                        
set -g base-index 1                                                             
                                                                                
# Automatically set window title                                                
# set-window-option -g automatic-rename on                                      
# set-option -g set-titles on                                                   
                                                                                
set -g default-terminal screen-256color                                         
set -g history-limit 10000                                                      
                                                                                
set -g status-keys vi                                                           
setw -g mode-keys vi                                                            
setw -g mode-mouse on                                                           
set -g mouse-select-window on                                                   
set -g mouse-select-pane on                                                     
set -g mouse-resize-pane on                                                     
                                                                                
# No delay for escape key press                                                 
set -sg escape-time 0                                                           
                                                                                
#}}}                                                                            
                                                                                
# bind keys                                                                     
#{{{                                                                            
# Reload tmux config                                                            
bind r source-file ~/.tmux.conf                                                 
                                                                                
# remap prefix to Control + a                                                      
set -g prefix C-a                                                                  
# bind 'C-a C-a' to type 'C-a'                                                     
bind C-a send-prefix                                                               
unbind C-b                                                                         
                                                                                   
# switch tabs with <b n>                                                           
bind b previous-window                                                             
                                                                                   
# vi like paste                                                                    
bind-key p paste-buffer                                                            
                                                                                   
# quick pane cycling                                                               
unbind a                                                                           
bind a select-pane -t :.+                                                          
                                                                                   
bind-key v split-window -h                                                         
bind-key s split-window -v                                                         
                                                                                   
bind-key J resize-pane -D 10                                                       
bind-key K resize-pane -U 10                                                       
bind-key H resize-pane -L 10                                                       
bind-key L resize-pane -R 10                                                       
                                                                                   
bind-key M-j resize-pane -D 2                                                      
bind-key M-k resize-pane -U 2                                                      
bind-key M-h resize-pane -L 2                                                      
bind-key M-l resize-pane -R 2                                                      
                                                                                   
# Vim style pane selection                                                         
bind h select-pane -L                                                              
bind j select-pane -D                                                              
bind k select-pane -U        
bind -n M-Down select-pane -D                                                   
                                                                                
# find asci keycodes with "sudo showkey -a" - works only tmux >1.7              
# us-keyboard like [ ]                                                          
bind-key -r 0xc3 display 'c3 prefix binding hack'                               
bind-key -r 0xb6 copy-mode # ö                                                  
bind-key -r 0xa3 paste-buffer # ä                                               
# us { }                                                                        
bind-key -r 0x96 swap-pane -U # Ö - swap pane to prev position                  
bind-key -r 0x84 swap-pane -D # Ä - to next pos  
                               
#}}}                         



       
6个回答

20

从tmux 2.5版本开始,您应该使用

unbind -T copy-mode-vi MouseDragEnd1Pane

2
如果您希望键盘也具有此行为,请使用以下命令:bind-key -T copy-mode-vi y send-keys -X copy-selection。随后您可以使用 y 键来复制所选内容,而无需跳转到底部。 - gitaarik
显然,自v2.8起,此语法已更改 - unbind的替代为unbind-key据报道可以正常工作 - Alex Ryan

12

我认为现在最简单的方法就是使用tmux-yank插件,并添加yank_action配置选项:

# ~/.tmux.conf

set -g @yank_action 'copy-pipe' # or 'copy-pipe-and-cancel' for the default

此外,tmux-yank 还会为您管理不同操作系统剪贴板(Linux、macOS、WSL)之间的差异,并添加一些非常有用的快捷方式,以复制当前命令行内容和当前工作目录。强烈推荐。


2
“copy-pipe” 在 WSL 2 上的 tmux 3.0a 对我有效。 - yixiang
非常好的答案,谢谢!别忘了在修改“.tmux.conf”后重新加载tmux。 - gignu

6
以下方法适用于我。感谢github上的@stagebind
对于vi-mode配置,https://github.com/tmux/tmux/issues/140#issuecomment-321144647
unbind -T copy-mode-vi MouseDragEnd1Pane

对于非vi模式配置,https://github.com/tmux/tmux/issues/140#issuecomment-302742783

# 2.4+
unbind -T copy-mode MouseDragEnd1Pane
# 2.2 - 2.3
unbind -t vi-copy MouseDragEnd1Pane

花了一些时间才得出正确的答案。
我也在使用Alacritty,但由于MouseDragEnd1Pane问题(如https://github.com/jwilm/alacritty/issues/1002所述),无法启用鼠标选择复制功能。
如果需要选择文本并使用y键进行复制,则可以使用以下配置来工作。
bind -T copy-mode-vi y send -X copy-pipe "reattach-to-user-namespace pbcopy"\; display-message "copied to system clipboard"

完整的配置,支持鼠标和vi键绑定,如下所示:

set-option -g default-command "reattach-to-user-namespace -l bash"
set -g mouse on

bind P paste-buffer
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send -X copy-pipe "reattach-to-user-namespace pbcopy"\; display-message "copied to system clipboard"
bind-key -T copy-mode-vi r send-keys -X rectangle-toggle

## don't jump to bottom on mouse select - when vi-mode enabled - 2.4+
#unbind -T copy-mode MouseDragEnd1Pane
## don't jump to bottom on mouse select - when vi-mode enabled - 2.2 - 2.3
#unbind -t vi-copy MouseDragEnd1Pane
## don't jump to bottom on mouse select - when vi-mode enabled
unbind -T copy-mode-vi MouseDragEnd1Pane

我正在使用OS X。


你有没有注意到你不能复制超过X行?似乎无法将大型缓冲区移动到剪贴板,你如何处理它? - calbertts
1
在使用 pbcopy 命令时,移除 reattach-to-user-namespace 可以解决剪贴板容量限制问题。 - calbertts

6

我能够通过在我的~/.tmux.conf中添加以下内容,使得在tmux(版本2.2)中鼠标选择不再跳到底部:

setw -g mouse on
setw -g mode-keys vi
unbind -t vi-copy MouseDragEnd1Pane
注意:这会带来打开vi模式的副作用。

我发现这个问题很相关,并在这些dotfiles中找到了上述配置。


4

从tmux 2.2版本开始,新增了复制模式下的选项 "-x"。使用此选项后,tmux在选择后仍会保留在拷贝模式中。请选择适合你模式设置的选项。

bind-key -t vi-copy MouseDragEnd1Pane copy-selection -x
bind-key -t emacs-copy MouseDragEnd1Pane copy-selection -x

1

看起来升级到tmux 2.1可能会解决你的问题。

在版本2.1中,他们使用单个鼠标开关改变了鼠标模式、鼠标选择窗口/窗格等。现在,鼠标操作生成可以映射为普通键的键事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接