如何使用壳管从tmux“剪贴板”复制/复制?

没想到

在外壳环境中工作时,我经常遇到需要复制“中间管道输出”的情况(例如,从/到已经运行的编辑器,到其他外壳,其他机器等)。

在窗口环境中,通常通过系统剪贴板来解决此问题的简单(通用)方法,例如:

  • X11:... | xsel -i/xsel -o | ...
  • OS X:... | pbcopy/pbpaste | ...

使用tmux复制/粘贴工具如何获得类似的便捷行为?

没想到

tl; dr

  • ... | tmux loadb -
  • tmux saveb - | ...

说明和背景

在tmux中,所有复制/粘贴活动都通过缓冲区堆栈,其中顶部(索引0)是最近复制的文本,当未显式提供缓冲区索引时将用于粘贴-b您可以使用tmux list-buffers或默认快捷键tmux-prefix+检查当前缓冲区#

有两种方法可以传递到堆栈顶部的新tmux缓冲区中:set-buffer采用字符串参数和load-buffer采用文件参数。要通过管道传输到缓冲区,通常需要load-buffer与stdin一起使用,例如:

print -l **/* | tmux loadb -

将此内容粘贴回编辑器中是很明显的(tmux-prefix+]或您绑定paste-buffer的内容),但是,不是从外壳内部访问粘贴内容,因为调用paste-buffer会将粘贴内容写入stdout,最终在终端的编辑中缓冲区,粘贴中的任何换行符都会使Shell执行到目前为止已粘贴的内容(这可能是毁掉您一天的好方法)。

有两种方法可以解决此问题:

  1. tmux pasteb -s ' '-s用您提供的任何分隔符替换所有行尾(分隔符)。但是,您仍然会遇到这种情况,paste-buffer这意味着粘贴最终会出现在终端编辑缓冲区中,这可能是您想要的,但通常不是。
  2. tmux showb | ...show-buffer将缓冲区打印到stdout,几乎是必需的,但是正如Chris Johnsen在评论中提到的那样show-buffer对不可打印的ASCII字符和非ASCII字符执行八进制编码。不幸的是,这种中断通常足以令人烦恼,甚至是简单的事情,例如以null结尾的字符串或带重音的拉丁字符(例如(在zsh中)print -N á | tmux loadb - ; tmux showb打印\303\241\000)。
  3. tmux saveb - | ...save-buffer只是做相反的操作,load-buffer并将未修改的原始字节写入stdout,这在大多数情况下是需要的。然后,您可以继续组装另一条管道,例如。传递| xargs -n1 -I{} ...到生产线明智的地方,等等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用VNC在Windows剪贴板和OpenSuse剪贴板之间复制/粘贴数据?

来自分类Dev

在tmux和剪贴板之间复制/粘贴文本选择

来自分类Dev

在tmux和剪贴板之间复制/粘贴文本选择

来自分类Dev

TMUX 2.3复制到剪贴板

来自分类Dev

如何在Go中将文本复制到剪贴板或从剪贴板复制文本?

来自分类Dev

tmux:如何将大量文本复制到系统剪贴板?

来自分类Dev

如何将tmux整个缓冲区复制到剪贴板?

来自分类Dev

如何检测“复制到剪贴板”事件

来自分类Dev

如何将窗口复制到剪贴板?

来自分类Dev

如何在Python中从剪贴板复制图像?

来自分类Dev

如何在剪贴板中复制颜色

来自分类Dev

如何将tableOutput复制到剪贴板?

来自分类Dev

如何在剪贴板中复制按钮的文本?

来自分类Dev

如何从byobu复制到系统剪贴板?

来自分类Dev

如何从vim复制到Mac剪贴板?

来自分类Dev

如何计算剪贴板中复制的文字字符?

来自分类Dev

在Firefox中使用Javascript复制到剪贴板

来自分类Dev

Python:使用tkinter从剪贴板复制而不显示窗口

来自分类Dev

使用剪贴板和AbstractAction复制和粘贴JTable

来自分类Dev

无法使用javascript复制剪贴板数据

来自分类Dev

使用剪贴板复制表格行

来自分类Dev

使用JavaScript将图像复制到剪贴板

来自分类Dev

无法使用javascript复制剪贴板数据

来自分类Dev

使用字体样式复制到剪贴板

来自分类Dev

使用剪贴板复制表格行

来自分类Dev

使用xclip从VM复制到主机剪贴板

来自分类Dev

使用VBA将范围复制到剪贴板

来自分类Dev

使用 UiPath 复制到 SAP 中的剪贴板

来自分类Dev

使用 clip.exe 复制到剪贴板