如何使用鼠标与tmux复制和粘贴


44

我正在使用tmuxOSX。从终端复制和粘贴时,tmux我可以按住Option并选择文本。但是,我无法使文本停留在窗格内。因此,当我想复制文本时,要么需要将窗格循环到最左边,要么将窗格缩放,如下所示。

除了必须按住Option键之外,这还很痛苦。我知道我可以进入视觉模式并使用vim动作到达那里,但我宁愿有一种使用鼠标的方法。有没有人找到解决方法?

在此处输入图片说明 在此处输入图片说明


“但是,我无法将文本留在窗格内。” 这是什么意思
布拉萨德

Answers:


36

将此代码块放入您的中~/.tmux.conf。这将启用鼠标集成,使您无需缩放即可使用鼠标从窗格中进行复制。

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 vi-copy    C-WheelUpPane   halfpage-up
bind -t vi-copy    C-WheelDownPane halfpage-down
bind -t emacs-copy C-WheelUpPane   halfpage-up
bind -t emacs-copy C-WheelDownPane halfpage-down

# To copy, drag to highlight text in yellow, press Enter and then release mouse
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "pbcopy"

之后,重新启动tmux会话。用鼠标突出显示一些文本,但不要松开鼠标。现在,当文本仍然突出显示并按下鼠标时,请按回车键。突出显示的文本将消失,并将被复制到剪贴板。现在释放鼠标。

除此之外,您还可以使用鼠标完成一些很酷的操作,例如上下滚动,选择活动窗格等。

如果您在macOS 上使用的是更新版本的tmux,请尝试以下操作,而不是上面的操作:

# macOS 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 "pbcopy"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"

如果在macOS上使用iTerm,请转到iTerm2>“首选项”>“常规”选项卡,然后在“选择”部分中,选中“终端中的应用程序可以访问剪贴板”。

而且,如果您使用的是Linux和较新版本的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"

(您还可以查看https://github.com/gpakosz/.tmux,了解许多其他tmux选项。)


1
终于有一些实际可行的方法了!尝试tmux时,复制和粘贴是最烦人的事情,我之前已经放弃了,而我尝试的配置代码片段表现得不一致,非常感谢。
Breno Salgado

1
我在Mac中使用iterm,必须启用iTerm2>“首选项”>“常规”选项卡,然后在“选择”部分中,“终端中的应用程序可以访问剪贴板”。参考:rushiagr.com/blog/2016/06/16/...
Rujoota沙阿

@RujootaShah是的,这是正确的。您需要这样做。感谢分享。
GMaster

1
谢谢!奇迹般有效。我需要安装sudo apt-get install -y xclip(Ubuntu Linux)。
彼得

工作完美,谢谢@GMaster
Luja Shrestha
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.