#tmux #tmux-plugin #tmux-copycat #rust

bin+lib copyrat

tmux 窗格内复制粘贴的插件

2 个版本

新功能 0.5.6 2024 年 8 月 15 日
0.5.5 2024 年 2 月 24 日

#957命令行工具

Download history 2/week @ 2024-07-27 111/week @ 2024-08-10

113 每月下载量

MIT 许可协议

140KB
2.5K SLoC

tmux-copyrat

crate documentation minimum rustc 1.74 edition 2021 tmux 3.x build status

一个用于从 tmux 窗格历史记录复制文本段到剪贴板的 tmux 插件。

使用场景:你在 tmux 中,窗格历史记录中有一些日期需要复制。你按下快捷键以突出显示日期(下面将介绍配置)。tmux-copyrat 将自动启动并突出显示所有与日期对应的文本段。所有文本段都显示一个或两个键的 提示,然后你可以按下提示以将文本段复制粘贴到 tmux 剪贴板或系统剪贴板。请查看下面的演示。

该名称是对我多年来一直使用的tmux-copycat 的致敬。对于这个 Rust 实现,我受到了 tmux-thumbs 的启发,甚至借鉴了他的一些正则表达式测试。

版本要求: rustc 1.74+

演示

即将推出

使用方法

首先安装并可选地自定义插件(请参阅INSTALLATION.mdCONFIGURATION.md 页面),然后重新启动 tmux。

按下下面表格中定义的其中一个 tmux 快捷键,以突出显示匹配特定模式的文本段。要复制 tmux 缓冲区中的某个文本段,请按下相应的 提示,或按 Esc 取消并退出。

如果你想要将文本段复制到系统剪贴板,可以按提示键的大写版本(例如,按 E 而不是 e),或者首先使用 space 键切换目标缓冲区,然后按无大写的提示键。

你还可以使用 nN(或 UpDown)键在突出显示的文本段之间移动焦点。按 y 将聚焦的文本段复制到 tmux 缓冲区,或按 Y 将其复制到系统剪贴板。

默认情况下,文本段突出显示从终端底部开始,但你可以使用 --reverse 选项反转此行为。使用 --focus-wrap-around 选项使导航返回到第一个文本段。更多选项请参阅 CONFIGURATION.md

匹配模式和默认快捷键

tmux-copyrat 可以匹配一个或多个预定义(命名)的模式,但您也可以添加自己的模式(请参阅CONFIGURATION.md)。

copyrat.tmux插件文件中提供的默认配置提供了以下快捷键绑定。由于它们都从prefix + t开始,下表只列出了后面的键盘键。例如,对于URL,键是u,但您应该输入prefix + t + u

快捷键 搜索 模式名称
c 十六进制颜色代码 hexcolor
d 日期或日期时间 datetime
D Docker/Podman ID docker
e 电子邮件 email
G 4位以上的数字字符串 digits
h SHA-1/-2 短/长 sha
m Markdown URL(代码[..](matched-url) markdown-url
p 绝对和相对文件路径 path
P 十六进制数字和指针地址 pointer-address
单引号内的字符串 quoted-single
双引号内的字符串 quoted-double
反引号内的字符串 quoted-backtick
q 单/双/反引号内的字符串
u URL url
U UUID uuid
v 版本号 version
4 IPv4地址 4
6 IPv6地址 6
空格 所有模式

Tmux 兼容性

tmux-copyrat 已知与从tmux 3.0开始的版本兼容。

测试此类与tmux的集成非常耗时,因此如果您发现任何不兼容性,我将不胜感激。

独立的copyrat可执行文件

尽管此crate的核心二进制文件是tmux-copyrat,但crate还包含了一个独立的copyrat可执行文件,它提供了相同的功能,但无需tmux依赖或集成,而是从stdin读取。

您可以使用copyrat搜索您提供的stdin中的文本段,类似于FZF,但更加专注且交互性较低。

例如,这里有一段包含日期和git哈希的文本,您可以使用copyrat进行搜索。

* e006b06 - (12 days ago = 2021-03-04T12:23:34) e006b06 e006b06 swapper: Make quotes
/usr/local/bin/git

lorem
/usr/local/bin
lorem
The error was `Error no such file`

让我们假设您想要一个快速的方法来始终搜索SHA-1/2、日期时间、反引号内的字符串,您只需定义以下别名

alias pick='copyrat -r --unique-hint -s bold -x sha -x datetime -x quoted-backtick | pbcopy'

然后简单

git log | pick

您将在终端看到以下内容

copyrat-output.png

您可能已经注意到所有相同的范围共享相同的提示,这是由于-unique-hint选项(-u)。提示以粗体文本显示,因为使用了--hint-style bold选项(-s)。提示从底部开始,因为使用了--reverse选项(-r)。由于使用了--custom-regex-pattern选项(-X),因此为匹配任何"loca"提供了一个自定义模式。sha、日期时间和反引号内的内容因为使用了--named-pattern选项(-x)而被突出显示。

运行代码覆盖率

安装llvm-tools-preview组件和grcov

rustup component add llvm-tools-preview
cargo install grcov

安装nightly

rustup toolchain install nightly

以下make调用将切换为夜间运行测试,使用Cargo输出覆盖率HTML报告在 ./coverage/

make coverage

覆盖率报告位于 ./coverage/index.html

许可

本项目采用 MIT 许可

供您选择。

贡献

除非您明确声明,否则您有意提交以包含在本工作中的任何贡献,如MIT许可中定义,将作为MIT许可,无任何附加条款或条件。

依赖

约5-15MB
约201K SLoC