关于tmux:tmux剪切板设置

56次阅读

共计 2023 个字符,预计需要花费 6 分钟才能阅读完成。

tmux 剪切板设置

  • 应用场景
    win11 的 host 中通过 mobaXterm 终端 ssh 连贯 virtualbox 中的 centos8。在 centos 中应用 tmux 进行 terminal 复用。
  • 需要
    在 tmux 中,须要能复制 terminal 的内容,能在 tmux 外部 paste,且须要能复制到 win host 中的 clipboard,以便能够在 host 中的 notepad++ 等工具中 paste 供后续应用。
  • 剖析
    mobaXterm 等终端工具,通常提供基于鼠标抉择的终端内容复制。如 mobaXterm 中默认通过鼠标选中终端内容后,即主动复制到 host 的 clipboard 中,通过单击鼠标滚轮即可实现 paste。

    但在 tmux 下上述 mobaXterm 基于鼠标抉择的复制形式受到限制,如通过 ctl+b % 进行分屏后,通过鼠标抉择会抉择到整个 mobaXterm 终端的内容,蕴含了多个 pane 的内容。即便 tmux 没有进行分屏,只有一个 window 的状况下,在 vim 下,通过 vim 的分屏,也会遇到相似的问题。

    实际上 tmux 提供了 copy-mode,在 copy-mode 下,能够在以后 pane 中指定范畴进行内容 copy。copy 的内容能够在 tmux 治理的 window、pane、session 中进行 paste。也能够联合 xclip 等工具将 copy 的内容通过 X11 发送到 X server(mobaXterm 会运行 X server),从而通过 X server 发送到 host 的 clipboard。也有一些不通过 X11 实现的办法,如 pbcopy。

    本文的解决方案即是基于 tmux 的 copy-mode,在 pane 中抉择指定的内容进行复制,并通过 xclip 连贯 X Server 将复制内容发送到 host 的零碎 clipboard。

  • 环境信息

    . host: win11
    . hypervisor: virtualbox 7
    . vm: centos8
    . terminal: mobaXterm 20

X11-forwarding 设置

如上,本文计划基于 X11,首先须要保障对应的 X11-forwarding 是失常工作的,具体方法参考 MobaXterm 中 X11-forwarding 问题。如下图,配置 ok 后,在 mobaXterm 登录 ssh session 的初始界面会显示 X11-forwarding 是 ok 的:

tmux 设置

  • tmux 默认的 copy-mode 应用形式
1. 进入 copy-mode:ctl+b [ 
2. 通过上下左右挪动抉择你须要开始 copy 的地位,ctrl+space 开始 copy
3. 通过上下左右挪动扩充你要抉择的范畴
4. copy 到 tmux buffer:ctl+ w 或者 alt+w
5. 在指标 pane、window 中 paste:ctl+b ]

mobaXterm 中 ctl+space 默认被设置为执行 macro,须要从新指定,以避免与 tmux 抵触。

  • 批改为 vi 的 copy-mode
    比拟习惯 vi 上面的操作模式,能够将 tmux 批改为 vi 下的 copy-mode,并且通过 xclip 将 tmux 复制内容发送到 host 的 clipboard。

    ~/.tmux.conf

    ## Use vim keybindings in copy mode
    #set-option -g mouse on
    setw -g mode-keys vi
    set-option -s set-clipboard off
    bind P paste-buffer
    
    bind-key -T copy-mode-vi v send-keys -X begin-selection
    # this not work
    # bind-key -T copy-mode-vi y send-keys -X rectangle-toggle
    bind-key -T copy-mode-vi y send -X copy-selection-and-cancel
    unbind -T copy-mode-vi Enter
    bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel 'xclip -se c -i'
    ##bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'xclip -se c -i'
  • vi 的 copy-mode 用法
1. 进入 copy-mode:ctl+b [ 
2. 通过 hujk 挪动抉择你须要开始 copy 的地位,v 开始 copy
3. 通过 hujk 挪动扩充你要抉择的范畴
4/1. copy 到 tmux buffer(不拷贝到 host 的 clipboard):y
4/2. copy 到 tmux buffer,并发送到 host 的 clipboard:Enter 
5. 在指标 pane、window 中 paste:ctl+b ] 或者 ctl+b P
  • 参考文档
    The Easy Way to Copy Text in Tmux
    Copy and Paste in Tmux

tmux-copy-mode

linux 装置 xclip 实现终端与剪贴板之间的通道

vi 设置

正文完
 0