2 个版本
0.1.1 | 2022 年 11 月 17 日 |
---|---|
0.1.0 | 2022 年 11 月 17 日 |
#2698 在 命令行工具 中
105KB
2.5K SLoC
ate
是一个终端分页器,它解析 终端超链接 并允许您搜索、在不同之间移动并打开它们。它除了分页外还提供导航功能。虽然它像现有的终端分页器一样通过文本流分页,但 less 在此用例中具有更多功能。
观看下面的视频了解高级用法,并查看 为什么使用 ate 了解更多关于该工具的动机及其使用方法。
https://user-images.githubusercontent.com/12270/194925821-a69e749d-798f-4702-b064-1a2978aeb8f3.mp4
取消静音视频以听解说或阅读以下内容
- 在此仓库中运行 ripgrep 对术语
render
进行搜索。我们使用 hyperer 将匹配的文件链接插入 ripgrep 中 - 将鼠标悬停在链接上以显示插入的内容
- 重新运行 ripgrep,将输出输入到
ate
中 - 使用
n
遍历链接 - 使用
/
搜索并缩小到单个结果 - 按
Enter
打开编辑器中的匹配项
安装
安装 Rust,克隆此仓库,并在克隆中运行 cargo install
。或者,如果您使用的是 Nix 软件包管理器,请在此仓库中依赖 flake.nix。
如果您没有想要与 ate
一起使用的程序,您可能还需要安装一些用于 获取链接 的东西。
用法
将文本发送到 ate
的标准输入,例如通过以下管道:hyperer-rg --pretty <my_search> | ate
或类似的重定向输入
ate<my_linkful_output
在任何情况下,ate
都会显示第一屏文本并解析其中的链接。
快捷键绑定
n
跳转到下一个链接。N
跳转到上一个链接。Enter
通过在ATE_OPENER
环境变量中以链接地址作为第一个参数启动命令,打开当前选中的链接。/
打开链接搜索器,并在其中输入文本可以缩小到包含输入文本的链接。- ⬆️ 和 ⬇️ 在链接搜索器中向前和向后移动匹配项。
- 链接搜索器中的
Enter
选中当前链接并返回到文本视图。 - 链接搜索器中的
Esc
退出搜索并返回到搜索前的位置。 q
在普通模式下退出,而Ctrl-C
在任何模式下退出。
环境变量
ate
的所有配置都通过环境变量完成。
ATE_OPENER
用于打开链接的程序,例如当按下 Enter
时。选定的链接作为第一个参数传递给它。链接应采用 file://hostname/path#line number
的形式,根据 终端超链接文档。不能保证程序不会发出格式不正确的链接,但 ate
打开器目前假定这种形式。
ate
预期调用此进程,并希望它在另一个窗口中打开要编辑的文件。例如,您可以使用 Vim 的远程命令 或 emacsclient 来完成此操作。
opener_examples 包含可以作为打开器的脚本。要使用其中一个,下载它,根据您的系统进行修改,并将 ATE_OPENER
导出为脚本的完整路径。
例如,如果您将此存储库克隆到 ~/dev/ate
并使用 NeoVim,则根据您的 shell 运行不同的命令
- 对于
zsh
或bash
:export ATE_OPENER=~/dev/ate/opener_examples/nvim_opener.bash
- 对于
fish
:set -xU ATE_OPENER ~/dev/ate/opener_examples/nvim_opener.bash
对于 zsh
或 bash
,您还希望将其添加到您的 shell 启动文件中,以便在新的 shell 中显示。
ATE_OPEN_FIRST
如果定义了,ate
将在启动时打开它找到的第一个链接。我使用此 Bash 脚本来运行 cargo
并编译 Rust。
# Use hyperer-cargo to link to Rust files in compilation failures, test failures, and backtraces
hyperer-cargo --color=always $* |\
# Print the cargo output to the terminal and to a temp file
tee /tmp/hyperlinked_cargo.out
# If the cargo command failed, open the output in ate.
# If it didn't fail, we won't have anything interesting to navigate
if [[ ${PIPESTATUS[0]} -ne 0 ]] ; then
# If it's been under 5 seconds since the script started, set ATE_OPEN_FIRST
# This means if a compile or test was quick, we open the failure using ATE_OPENER ASAP
# If cargo took longer, we don't immediately open a link in case we've started doing something in our editor.
if [[ $SECONDS -lt 5 ]] ; then
export ATE_OPEN_FIRST=
fi
ate < /tmp/hyperlinked_cargo.out
fi
获取链接
ate
最有用的是包含超链接的文本。终端超链接是一项相对较新的功能,因此很少有程序默认支持它们。ls
、gcc
、systemd
和 delta 是其中一些。
在超链接支持出现在更多程序中之前,我们可以包装现有程序,检测其输出中可能被链接的内容,并在这些文本周围生成终端链接。
hyperer 为 ripgrep 和 cargo 实现了这一点。我强烈推荐安装它,并使用 ripgrep 与之结合使用,以了解 ate
的功能。它还可以作为添加其他命令链接的基础。
缺少的功能
ate
非常年轻,缺少明显的功能。我计划至少添加以下这些:
- 搜索文本。目前它只能搜索链接。
- 流式输入。目前它在启动时读取所有标准输入。
以下功能可能也很有意义:
- 接受文件参数而不是仅接受标准输入。
- 跟踪文件。
可能可以通过其他实用工具处理这些情况。如果不能,我将在 ate 中添加它们。
依赖关系
~19–28MB
~490K SLoC