#tmux #tmux-plugin #vimperator #vimium #rust

应用 thumbs

类似于vimium/vimperator的闪电般快速的复制粘贴版本

10 个版本

0.7.1 2022年3月30日
0.6.1 2021年9月3日
0.6.0 2021年6月20日
0.5.1 2021年1月29日
0.3.0 2020年1月19日

#221命令行界面

Download history 1/week @ 2024-03-22 17/week @ 2024-03-29 3/week @ 2024-04-05 2/week @ 2024-04-12 6/week @ 2024-06-28 55/week @ 2024-07-05

61 每月下载量

MIT 许可证

79KB
1.5K SLoC

tmux-thumbs

Build Status dependency status Coverage Status Maintenance MIT licensed

tmux-fingers 的闪电般快速版本,使用 Rust 编写,用于像 vimium/vimperator 一样进行复制粘贴。

用法

按下 ( 前缀 + 空格 ) 在当前 tmux 可见面板中突出显示所有匹配特定模式的文本。然后按下突出显示的字母提示来在您的 tmux 缓冲区中粘贴文本。

匹配模式

  • 文件路径
  • diff 中的文件
  • Git SHA
  • IPFS CID
  • 十六进制颜色
  • 数字(4位以上)
  • 十六进制数字
  • Markdown URL
  • IPv4、IPv6 地址
  • Docker 镜像
  • kubernetes 资源
  • UUID

这些都是默认突出显示的匹配模式列表。如果您想突出显示列表中未列出的模式,您可以使用 --regexp 参数添加一个或多个。

演示

demo

使用 Tmux 插件管理器

您可以将此行添加到 .tmux.conf 中的 TPM 插件列表中

set -g @plugin 'fcsonline/tmux-thumbs'

run-shell ~/.tmux/plugins/tmux-thumbs/tmux-thumbs.tmux

要安装插件,只需按 前缀 + I。现在您应该可以使用该插件了!

通过检出源代码进行安装

tmux-thumbs 使用 Rust 编写。您需要 rustc 版本 1.35.0 或更高版本。安装 Rust 的推荐方式是从官方 下载页面

克隆仓库

git clone https://github.com/fcsonline/tmux-thumbs ~/.tmux/plugins/tmux-thumbs

使用 cargo 编译它

cd ~/.tmux/plugins/tmux-thumbs
cargo build --release

在您的 .tmux.conf 中引用它

run-shell ~/.tmux/plugins/tmux-thumbs/tmux-thumbs.tmux

通过运行以下命令重新加载 TMUX 配置

tmux source-file ~/.tmux.conf

配置

如果您想自定义显示 tmux-thumbs 提示的方式,所有可用的参数都可以设置您的完美配置文件。

注意:为了使更改生效,您需要再次引用您的 .tmux.conf 文件。

@thumbs-key

默认:空格

选择用于进入缩略图模式的键。

例如

set -g @thumbs-key F

如果您想自定义触发tmux-thumbs的方式,您始终可以将任何键绑定到thumbs-pick命令。例如

bind-key \; thumbs-pick

@thumbs-alphabet

默认:qwerty

选择用于构建提示的字符集。查看所有可用字母表

例如

set -g @thumbs-alphabet dvorak-homerow

@thumbs-reverse

默认:禁用

选择您希望分配提示的方向。对于将较短的提示放在光标附近非常有用。

例如

set -g @thumbs-reverse enabled

@thumbs-unique

默认:禁用

选择是否为相同的匹配字符串分配相同的提示。

例如

set -g @thumbs-unique enabled

@thumbs-position

默认:

选择您想在匹配字符串中显示提示的位置。选项(左,右,左偏,右偏)。

例如

set -g @thumbs-position right

@thumbs-regexp-N

添加额外的匹配模式。此参数可以有多个实例。

例如

set -g @thumbs-regexp-1 '[a-z]+@[a-z]+.com' # Match emails
set -g @thumbs-regexp-2 '[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:' # Match MAC addresses
set -g @thumbs-regexp-3 'Vlan\d+' # match Vlan interface on network devices
set -g @thumbs-regexp-4 "Vlan\\d+" # alternative method of defining regexp
set -g @thumbs-regexp-5 Vlan\\d+ # alternative method of defining regexp

@thumbs-command

默认: 'tmux设置-缓冲区-- {} &&tmux 显示-消息 \"已复制 {}\"'

选择在按提示时执行的命令。 tmux-thumbs将使用选定的提示替换{}

例如

set -g @thumbs-command 'echo -n {} | pbcopy'

@thumbs-upcase-command

默认: 'tmux设置-缓冲区-- {} &&tmux 粘贴-缓冲区&&tmux 显示-消息 \"已复制 {}\"'

选择在按大写提示时执行的命令。 tmux-thumbs将使用选定的提示替换{}

例如

set -g @thumbs-upcase-command 'echo -n {} | pbcopy'

@缩略图多命令

默认: 'tmux设置-缓冲区-- {} &&tmux 粘贴-缓冲区&&tmux 发送-按键' ' &&tmux 显示-消息 \"已复制多个项目!\"'

选择在选择多个项目时执行的命令。 tmux-thumbs将使用每个选定的提示替换{}

例如

set -g @thumbs-multi-command 'echo -n {}'

@缩略图背景颜色

默认:黑色

设置匹配项的背景颜色

例如

set -g @thumbs-bg-color blue

@缩略图前景颜色

默认:绿色

设置匹配项的前景颜色

例如

set -g @thumbs-fg-color green

@缩略图提示背景颜色

默认:黑色

设置提示的背景颜色

例如

set -g @thumbs-hint-bg-color blue

@缩略图提示前景颜色

默认:黄色

设置提示的前景颜色

例如

set -g @thumbs-hint-fg-color green

@缩略图选择前景颜色

默认:蓝色

设置选择的背景颜色

例如

set -g @thumbs-select-fg-color red

@缩略图选择背景颜色

默认:黑色

设置选择的前景颜色

例如

set -g @thumbs-select-bg-color red

@缩略图多选前景颜色

默认:黄色

设置多选项的前景颜色

例如

set -g @thumbs-multi-fg-color green

@缩略图多选背景颜色

默认:黑色

设置多选项的背景颜色

例如

set -g @thumbs-multi-bg-color red

@缩略图对比度

默认: 0

在方括号中显示提示字符以提高可见性。

例如

set -g @thumbs-contrast 1

@缩略图osc52

默认: 0

如果设置为1,则在运行选择命令的同时,tmux-thumbs将打印一个OSC52复制转义序列。在支持此序列的终端(例如iTerm)中,此序列允许将内容复制到系统剪贴板以及tmux复制缓冲区。

例如

set -g @thumbs-osc52 1

颜色

这是预定义颜色列表

  • 黑色
  • 红色
  • 绿色
  • 黄色
  • 蓝色
  • 品红色
  • 青色
  • 白色
  • 默认

也支持使用十六进制颜色,格式为#RRGGBB

字母表

这是可用字母表列表

  • 数字: 1234567890
  • abcd: abcd
  • qwerty: asdfqwerzxcvjklmiuopghtybn
  • qwerty-homerow: asdfjklgh
  • qwerty-left-hand: asdfqwerzcxv
  • qwerty-right-hand: jkluiopmyhn
  • azerty: qsdfazerwxcvjklmuiopghtybn
  • azerty-homerow: qsdfjkmgh
  • azerty-left-hand: qsdfazerwxcv
  • azerty-right-hand: jklmuiophyn
  • qwertz: asdfqweryxcvjkluiopmghtzbn
  • qwertz-homerow: asdfghjkl
  • qwertz-left-hand: asdfqweryxcv
  • qwertz-right-hand:jkluiopmhzn
  • dvorak:aoeuqjkxpyhtnsgcrlmwvzfidb
  • dvorak-homerow:aoeuhtnsid
  • dvorak-left-hand:aoeupqjkyix
  • dvorak-right-hand:htnsgcrlmwvz
  • colemak:arstqwfpzxcvneioluymdhgjbk
  • colemak-homerow:arstneiodh
  • colemak-left-hand:arstqwfpzxcv
  • colemak-right-hand:neioluymjhk

额外功能

  • 箭头导航:您可以使用箭头在所有匹配项之间移动。
  • 自动粘贴:如果您的最后输入的提示字符是大写字母,您将选择并粘贴所需的提示。

多选

如果您想启用选择多个匹配项的功能,请按 空格。然后,选择带高亮提示的匹配项或 Enter(使用光标移动)和再次按 空格,以输出所有匹配项。

如果您以多选模式(-m)单独运行 thumbs,您将能够按所需的字母和 空格 完成选择。

Tmux 兼容性

这是与 tmux-thumbs 兼容的 tmux 版本已知列表

版本 兼容
3.0a
2.9a
2.8
2.7
2.6
2.5
2.4
2.3
1.8
1.7

如果您能检查 tmux-thumbs 是否与某些特定的 tmux 版本兼容,请告知我。

独立 thumbs

这个项目最初是一个 tmux 插件,但经过与一些朋友的讨论后,我们决定探索将 thumbs 从 tmux 解耦的所有可能性。您可以使用以下命令进行安装

cargo install thumbs

这些都是可用的选项

thumbs 0.7.1
A lightning fast version copy/pasting like vimium/vimperator

USAGE:
    thumbs [FLAGS] [OPTIONS]

FLAGS:
    -c, --contrast    Put square brackets around hint for visibility
    -h, --help        Prints help information
    -m, --multi       Enable multi-selection
    -r, --reverse     Reverse the order for assigned hints
    -u, --unique      Don't show duplicated hints for the same match
    -V, --version     Prints version information

OPTIONS:
    -a, --alphabet <alphabet>                          Sets the alphabet [default: qwerty]
        --bg-color <background_color>                  Sets the background color for matches [default: black]
        --fg-color <foreground_color>                  Sets the foregroud color for matches [default: green]
    -f, --format <format>
            Specifies the out format for the picked hint. (%U: Upcase, %H: Hint) [default: %H]

        --hint-bg-color <hint_background_color>        Sets the background color for hints [default: black]
        --hint-fg-color <hint_foreground_color>        Sets the foregroud color for hints [default: yellow]
    -p, --position <position>                          Hint position [default: left]
    -x, --regexp <regexp>...                           Use this regexp as extra pattern to match
        --select-bg-color <select_background_color>    Sets the background color for selection [default: black]
        --select-fg-color <select_foreground_color>    Sets the foreground color for selection [default: blue]
        --multi-bg-color <multi_background_color>      Sets the background color for a multi selected item [default: black]
        --multi-fg-color <multi_foreground_color>      Sets the foreground color for a multi selected item [default: cyan]
    -t, --target <target>                              Stores the hint in the specified path

如果您想在没有 tmux 的情况下享受终端提示,您可以这样做

> alias pick='thumbs -u -r | xsel --clipboard -i'
> git log | pick

或多选

> git log | thumbs -m
1df9fa69c8831ac042c6466af81e65402ee2a007
4897dc4ecbd2ac90b17de95e00e9e75bb540e37f

独立的 thumbsFZF 有一些相似之处。

背景

正如我所说,这个项目基于 tmux-fingers。Morantron 做了非凡的工作,使用 Bash 建立了所有必要的组件来实现文本选择器的行为。他只值得我对我在使用 tmux-fingers 的所有时间里表示感激。

Fosdem 会议期间,我们有了将这个项目重写为另一种语言的念头。他之前也有过这样的想法,但很难从头开始。因此,我们决定开始尝试 Node.js 和 react-blessed,但我们发现在程序启动时有一些无法接受的延迟。我们没有对此延迟进行深入调查。

在那段时间里,另一种替代方案出现了,称为 tmux-picker,用 Python 实现,并重用了来自 tmux-fingers 的许多部分。它很好,因为它速度快,还增加了原始终端颜色支持。

我很好奇是否可以用 Rust 来编写,很快我就意识到这是可行的。对应用程序所有关键部分进行测试的能力使你对它充满信心。另一方面,Rust 有一个极好的社区,让你能在短时间内完成这样的项目。

路线图

  • 支持多选
  • tmux-thumbstmux 解耦
  • 编写 Kitty 插件,现在 thumbs 可以独立运行

故障排除

tmux-thumbs 必须非常快地工作。如果您在捕获屏幕提示时遇到性能慢的问题,请尝试使用以下设置配置 Tmux

set -g visual-activity off
set -g visual-bell off
set -g visual-silence on

您可以在以下链接了解更多关于此问题的信息:https://github.com/fcsonline/tmux-thumbs/issues/88

每次我使用 tmux-thumbs 时,都会创建无效的窗口。请检查您是否有这个设置。

set -g remain-on-exit on

您可以在以下链接了解更多关于此问题的信息:https://github.com/fcsonline/tmux-thumbs/issues/84

贡献

这个项目最初是为了学习 Rust 而开始的副项目,所以我相信它充满了错误和需要改进的地方。如果您认为您可以对代码进行调整以使其更好,我将非常感激一个 pull request。 ;)

许可证

MIT

依赖项

约 3-4MB
约 67K SLoC