终端窗口管理工具先导篇---打通系统最后一道墙|copy

2,770 阅读3分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

前言

  • tmux 作为终端窗口管理工具,着重帮我们解决多窗口协调问题。我们再也不用开多个终端切来切去了。但是 tmux 中复制粘贴支持的不是很友好。今天我们介绍两个插件来快速复制粘贴。

复制模式

  • 首先 tmux 本身是支持复制粘贴的,可以通过 prefix + [ 进入复制模式,这个时候我们可以选中复制内容然后通过 y 复制。选中的方式有 viemacs 两种。
  • copy-model 将快捷键设置成 vi 模式 , 这样我们就可以在 copy-model 中使用 vi 的快捷键了,hjkl 移动,cdyp 更新删除复制粘贴等等操作了,强 烈建议设置。
setw -g mode-keys vi
  • 默认情况下 prefix +y 或者 prefix +[ 进入复制模式选择内容。然后通过 prefix +] 粘贴内容。但是这些复制是仅限在 tmux 中通信的。但是我们正常还是喜欢在系统剪切板中复制粘贴内容的。
  • 为了能够将 tmux 复制的内容复制到系统剪切板,我们大体上有两种方式,一种是借助外部工具 xsel 或者 xclip 等工具,然后再 .tmux.conf 中配置文件绑定快捷键即可

xsel

bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xsel -i --clipboard"

xclip

bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"

yank 插件

  • 上面通过 xsel 或者 xclip 进行 tmux 复制内容到系统剪切板。当然 tmux 也有相应的插件来实现。 tmux-yank 就是将 tmux 复制到系统剪切板。在 linux 系统中存在多种剪切板分别是 primarysecondaryclipboard 。其中 clipboard 就是作为我们系统剪切板。而在 tmux-yank 中默认是就是复制到 clipboard 系统剪切板。可以通过设置 yank_selection 设置
# ~/.tmux.conf
​
set -g @yank_selection 'clipboard' # or 'secondary' or 'clipboard'
  • tmux 除了键盘支持外还有鼠标支持。在鼠标中复制粘贴也是可以复制到剪切板的。而在鼠标中默认是 primary 。 我们通过可以设置 yank_selection_mouse
# ~/.tmux.conf
​
set -g @yank_selection_mouse 'clipboard' # or 'primary' or 'secondary'
  • 完成如上两个设置我们就可以打通 tmux 中复制到系统剪切板了,鼠标和键盘都可以了
  • 如果你不想使用 tmux 中的鼠标复制功能。那么你可以关闭
# ~/.tmux.conf
​
set -g @yank_with_mouse off # or 'on'

tmux-fingers

  • 上面我们已经完成了复制粘贴功能。但是在 vim 中有个 easymotion 的插件主要方便我们任意跳动。在 tmux 中复制也是可以这样任意跳转的,那就是 tmux-fingers
set -g @plugin 'Morantron/tmux-fingers'
run-shell ~/.tmux/plugins/tmux-fingers/tmux-fingers.tmux
  • 安装好插件之后我们通过 prefix + F 唤醒快速复制。下图就是生成的快捷键 (黄色字母) 。 你想要复制哪块内容直接按黄色快捷键即可。

image-20221109134809875.png

  • 按下之后内容就会复制到 tmux 的粘贴板。如果你完成了上面的 yank 插件配置,这个时候的内容同时就会复制到系统剪切板。我们可以直接在其他地方粘贴,如果你想要在 tmux 粘贴可以通过 prefix +]
指令解释
a-z复制选中内容到剪切板
CTRL + a-z复制选中内容并自动粘贴打开
SHIFT + a-z复制选中内容并自动粘贴
ALT + a-z复制选中内容并自动粘贴
TAB开启多选复制模式
SPACE切换快捷生成位置(头部,尾部)
CTRL + c退出
ESC退出
?show help.

本文正在参加「金石计划 . 瓜分6万现金大奖」