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 实现终端与剪贴板之间的通道