我可以双击 select 并复制到 tmux 中吗?

Can I use double click to select and copy in tmux?

我正在学习使用 tmux,我发现当我在一个 tmux window 中时,双击 select 并且复制功能不再起作用。

我可以像在 iterm2 中一样使用双击 select 和复制吗?

我用谷歌搜索了一段时间,但没有找到简短而明确的答案。我已经在 tmux 配置文件中添加了 setw -g mode-mouse on

我找到了一种实现方法:双击时按住 option 键。

不知道 iterm2,但这可以在 tmux 3.0 或更高版本中工作
(在 Linux w/tmux 3.0 上测试,最后一个命令使用X11 xclip).

添加三次点击 select 并复制一行。

# Double LMB Select & Copy (Word)
bind-key -T copy-mode-vi DoubleClick1Pane \
    select-pane \; \
    send-keys -X select-word-no-clear \; \
    send-keys -X copy-pipe-no-clear "xclip -in -sel primary"
bind-key -n DoubleClick1Pane \
    select-pane \; \
    copy-mode -M \; \
    send-keys -X select-word \; \
    send-keys -X copy-pipe-no-clear "xclip -in -sel primary"

# Triple LMB Select & Copy (Line)
bind-key -T copy-mode-vi TripleClick1Pane \
    select-pane \; \
    send-keys -X select-line \; \
    send-keys -X copy-pipe-no-clear "xclip -in -sel primary"
bind-key -n TripleClick1Pane \
    select-pane \; \
    copy-mode -M \; \
    send-keys -X select-line \; \
    send-keys -X copy-pipe-no-clear "xclip -in -sel primary"

如果您不使用 copy-mode-vi,请将其替换为 copy-mode


对于旧的 tmux 版本,请检查编辑历史。

Alacrity 中按住 Shift 允许像没有 tmux 一样进行复制。

source

基于@ideasman42 的回答。这是为 macos mojave 使用 tmux 2.8 和 pbcopy。

# Double LMB Select & Copy (Word)
bind-key -n DoubleClick1Pane \
    select-pane \; \
    copy-mode -M \; \
    send-keys -X select-word \; \
    run-shell "sleep .5s" \; \
    send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -n DoubleClick1Pane \
    select-pane \; \
    copy-mode -M \; \
    send-keys -X select-word \; \
    run-shell "sleep .5s" \;
    send-keys -X copy-pipe-and-cancel "pbcopy

我的版本选中单词,简单高亮显示,复制到系统缓冲区,然后取消copy-mode。

我已经想出了一个复制粘贴机制,它类似于您对终端的期望

我使用以下设置能够:

  1. select鼠标双击一个词
  2. select 鼠标三击动作的一行
  3. select局部行鼠标拖放动作

此解决方案将保持 selection 突出显示并将 selection 输出复制到两个剪贴板缓冲区(主缓冲区和剪贴板缓冲区)

当您点击 "Enter" 时退出并返回 shell

这里的优点是您可以在 tmux 之外使用鼠标中键作为 shift-insert 组合来粘贴内容,而它仍然是 selected。

另外当您退出回到 shell 时,您可以使用鼠标中键或按下 shift-insert 来粘贴内容

您对正常终端环境的所有期望

    # Enable mouse control
    setw -g mouse on

    unbind -T copy-mode-vi Enter
    bind-key -T copy-mode-vi Enter \
        send -X cancel

    # Drag and Drop Aelect & Copy (Selection)
    bind-key -T copy-mode-vi MouseDragEnd1Pane \
        send-keys -X copy-pipe "xclip -in -f | xclip -in -sel c" \; \
        send-keys -X no-clear

    # Double LMB Select & Copy (Word)
    bind-key -T copy-mode-vi DoubleClick1Pane \
        select-pane \; \
        send-keys -X select-word \; \
        send-keys -X copy-pipe "xclip -in -f | xclip -in -sel c" \; \
        send-keys -X no-clear
    bind-key -n DoubleClick1Pane \
        select-pane \; \
        copy-mode -M \; \
        send-keys -X select-word \; \
        send-keys -X copy-pipe "xclip -in -f | xclip -in -sel c" \; \
        send-keys -X no-clear

    # Triple LMB Select & Copy (Line)
    bind-key -T copy-mode-vi TripleClick1Pane \
        select-pane \; \
        send-keys -X select-line \; \
        send-keys -X copy-pipe "xclip -in -f | xclip -in -sel c" \; \
        send-keys -X no-clear
    bind-key -n TripleClick1Pane \
        select-pane \; \
        copy-mode -M \; \
        send-keys -X select-line \; \
        send-keys -X copy-pipe "xclip -in -f | xclip -in -sel c" \; \
        send-keys -X no-clear

    # Middle click to paste from the primary buffer
    unbind-key MouseDown2Pane
    bind-key -n MouseDown2Pane run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"

    # Shift insert to paste from the clipboard
    unbind-key S-IC
    bind-key S-IC run "tmux set-buffer \"$(xclip -o -sel c)\"; tmux paste-buffer"
  • 注意 1:为了使其在 ssh 会话中工作:-X 必须作为 ssh 的选项提供
  • 注意 2:我使用的是 tmux 2.8 版

Kitty/Alacritty 上,我们在按住 Shift 的同时双击文本块。并且复制在本机和 tmux 中都可以正常工作。