如果我在 macOS 上的 iTerm2 中的 tmux 中使用鼠标选择文本,则会将所选文本复制到剪贴板中。我不必单击任何额外的按钮 - 只需选择所需的文本即可。
我已经在 macOS 上的 terminal.app 中测试了 tmux,但它在那里不起作用 - 我必须点击y
将选择复制到我的剪贴板。
我认为有一个鼠标绑定(MouseOnSelection
类似于MouseDown1Pane
),但我在网络和man tmux
.
我想知道是否有办法在 Ubuntu 16.10 上有类似的行为 - 最好是在 Gnome 终端中。
Jos*_*bst 64
Tmux 2.4+ 带有 vi 复制模式绑定和xclip:
set-option -g mouse on
set-option -s set-clipboard off
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
Run Code Online (Sandbox Code Playgroud)
对于较旧的 tmux 版本、emacs 复制模式绑定(默认)或非 X 平台(即没有 xclip),请参阅下面的说明。
说明:首先我们需要启用鼠标选项,以便 tmux 将捕获鼠标并让我们绑定鼠标事件:
set-option -g mouse on
Run Code Online (Sandbox Code Playgroud)
Gnome-terminal 不支持使用 xterm 转义序列设置剪贴板,所以我们应该确保该set-clipboard
选项关闭:
set-option -s set-clipboard off
Run Code Online (Sandbox Code Playgroud)
默认情况下,iTerm2 可能支持并启用此选项(参见set-clipboard
tmux 手册),这将解释那里的行为。
然后我们可以将复制模式MouseDragEnd1Pane
“键”绑定到一个 tmux 命令,即当在窗格中单击并拖动后释放第一个鼠标按钮时,该命令采用当前复制模式选择(由 的默认绑定进行MouseDrag1Pane
)并将其通过管道传输到 shell 命令。这个 tmux 命令是copy-pipe
在 tmux 2.4 之前的,并且已经更改为send-keys -X copy-pipe[-and-cancel]
. 至于 shell 命令,我们只需要一些东西,它将系统剪贴板的内容设置为通过管道传输到它的任何内容;xclip 用于在以下命令中执行此操作。"xclip -selection clipboard -i"
在非 X 平台上,下面的一些等效替代品是"wl-copy"
(Wayland)、"pbcopy"
(macOS)、"clip.exe"
(Windows、WSL) 和"cat /dev/clipboard"
(Cygwin、MinGW)。
Tmux 2.4+:
# For vi copy mode bindings
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
Run Code Online (Sandbox Code Playgroud)
Tmux 2.2 到 2.4:
# For vi copy mode bindings
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
Run Code Online (Sandbox Code Playgroud)
在 tmux 2.2 之前:
通过将新mode-mouse
选项设置为on
. Tmux 2.1 将鼠标支持更改为熟悉的鼠标键绑定,但没有DragEnd
绑定,这是在 2.2 中引入的。因此,在 2.2 之前,我相信在鼠标拖动时设置系统剪贴板的唯一方法是通过内置使用 xterm 转义序列(set-clipboard
选项)。这意味着需要至少更新到 tmux 2.2 才能获得不支持 的终端的拖拽和复制行为set-clipboard
,例如 GNOME 终端。
Gab*_*ton 11
作为已接受答案的扩展,人们经常发现释放鼠标按钮退出复制模式时令人不安(这就是 发生的情况copy-pipe-and-cancel
)。请参阅:https : //github.com/tmux/tmux/issues/140。因此,在较新的 tmux(我使用 2.6)中,我们可以copy-pipe
一起使用withclear selection
复制到选择但不退出复制模式:
bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe "xclip -selection clipboard -i" \; send -X clear-selection
Run Code Online (Sandbox Code Playgroud)
小智 11
另一个扩展是关于使用Shift
密钥。
按住Shift
鼠标选择文本。现在您将获得一个标准的右键单击菜单(按住或Shift
再次按下),您可以使用Ctrl+Shift+C
和Ctrl+Shift+V
进行复制和粘贴。复制的文本也将在系统剪贴板中可用。
测试在Ubuntu 18.04.1
用tmux 2.6
。
来源:https : //forum.upcase.com/t/tmux-ctrl-shift-c-and-ctrl-shift-v-bindings/1208。