16 个稳定版本
2.8.0 | 2023 年 9 月 19 日 |
---|---|
2.7.0 | 2023 年 1 月 23 日 |
2.6.0 | 2022 年 1 月 23 日 |
2.5.1 | 2021 年 9 月 28 日 |
0.10.0 | 2017 年 7 月 1 日 |
#405 在 命令行工具
80 每月下载量
125KB
3K SLoC
Scout
Scout 是一个使用 Rust 编写的、为终端构建的小型模糊查找工具。
它受到了其他工具如 selecta 和无处不在的 fzf 的极大启发。
scout
的主要功能包括
- 异步架构,得益于
async-std
库。这意味着它不会阻塞 UI 等待STDIN
完成,您可以立即开始输入。 - 可定制的 UI。您可以根据需要更改 UI 中所有元素的颜色和符号。
- 基于 Atom 编辑器中使用的
fuzzaldrin-plug
包的快速模糊匹配算法。
警告
此工具使用位于 /dev/tty
的系统伪终端来打印 UI 并捕获输入,这意味着它只能在 UNIX 系统(如 Linux 或 macOS)上运行,据我所知。
安装
通过发行版包安装
从版本 v1.0.0
(不包括)开始,每个发行版都有一个为不同架构编译的 scout
包。您可以尝试下载和安装与您的架构匹配的包。
您可以在其 GitHub 页面 中找到这些发行版。
通过 cargo 安装
Scout 位于主要的 crates 仓库中,因此您可以使用 cargo
安装它
$ cargo install scout
请记住将 cargo
二进制路径添加到主 $PATH
环境变量中
export PATH=$PATH:~/.cargo/bin
通过 homebrew 安装(仅限 macOS)
您可以使用我的自定义 tap 仓库使用 homebrew 安装 scout
$ brew tap jhbabon/tap
$ brew install scout
通过 MacPorts 安装(仅限 macOS)
在macOS上,您还可以通过MacPorts安装scout
。
$ sudo port install scout
从源码安装
scout
是一个Rust项目,因此您需要在系统中安装Rust。请检查rustup
以了解如何安装Rust。要构建scout
,您需要Rust v1.43
或更高版本。
克隆仓库并从中运行cargo install
$ git clone https://github.com/jhbabon/scout.git path/to/scout
$ cd path/to/scout
$ cargo install --path .
如果您只是想试一试,也可以运行cargo build --release
。二进制文件将在./target/release/scout
路径下。
用法
scout
的主要思想,或者任何其他模糊查找器,都是过滤一个项目列表(例如文件路径列表),然后对所选内容进行一些操作。为此,您运行一个命令,将其输出管道传递给scout
,然后将scout
的输出管道传递给另一个命令。
例如,您可以尝试查找一个文件并cat
其内容
$ find * -type f | scout | xargs -n1 cat
scout
有一组选项,允许您控制其外观。它还支持一组控制序列和键来导航UI。
您可以使用--help
标志在程序的主帮助中查看这些选项
scout 2.0.0
Your friendly fuzzy finder
USAGE:
scout [FLAGS] [OPTIONS]
FLAGS:
-f, --full-screen Show scout in full screen (default)
-h, --help Prints help information
-i, --inline Show scout under the current line
-p, --preserve-order Do not sort the result by score
-v, --version Prints version information
OPTIONS:
-c, --config <FILE> Uses a custom config file
-l, --lines <LINES> Number of lines to display in inline mode, including prompt
-s, --search <QUERY> Start searching with the given query
SUPPORTED KEYS:
- Enter to select the current highlighted match and print it to STDOUT
- ^u to clear the prompt
- ^n or Down arrow key to select the next match
- ^p or Up arrow key to select the previous match
- ^e to go to the end of the prompt
- ^a to go to the beginning of the prompt
- Left arrow key to move the cursor to the left in the prompt
- Right arrow key to move the cursor to the right in the prompt
- ESC to quit without selecting a match
EXAMPLE:
$ find * -type f | scout
# Pass an initial query to start filtering right away
$ find * -type f | scout --search=foo
# Use a custom config file
$ find * -type f | scout --config="./config.toml"
# Select a git branch and check it out with an inline menu
$ git branch --sort=-committerdate| cut -c 3- | scout -i -p | xargs git checkout
配置
您可以使用配置文件来配置scout
的UI。默认情况下,程序将尝试在路径$HOME/.config/scout.toml
中找到此文件,但您可以使用--config
选项传递自定义路径。
这是没有定义样式的scout
的外观
这是一个包含所有可能设置的配置文件的示例
# General screen options
[screen]
# Display inline (under the current line) or in full screen
mode = "inline" # or "full"
# Max number of lines to display the whole UI. Only used in inline mode
lines = 8
# The prompt is where you type your query
[prompt]
# Symbol displayed before the text you will type
symbol = "❯ "
# Style for the query (your text)
style = "bold underline"
# Style for the symbol
style_symbol = "fg:green"
# The gauge indicates the number of matches vs total number of lines
[gauge]
# Symbol used to separate both numbers
symbol = " ⚡"
# Text before the numbers
prefix = "- "
# Style for the numbers
style = "fg:bright-yellow"
# A candidate is an item in the list that is not selected
[candidate]
# Symbol displayed before the candidate's text
symbol = "❔ "
# Style for the candidate's text
style = "bg:red fg:black"
# Style for the symbol
style_symbol = "bg:red"
# A match is a character that is in both the query and the candidate
style_match = "underline bg:black fg:red bold"
# The selected candidate
[selection]
# Symbol displayed before the selection's text
symbol = "✅ "
# Style for the selection's text
style = "bg:green fg:black"
# Style for the symbol
style_symbol = "bg:green"
# A match is a character that is in both the query and the selection
style_match = "underline fg:bright-green bg:black"
将此配置放置在$HOME/.config/scout.toml
中,将生成此UI
这并不漂亮,但它只是展示您可以做什么的一个例子。
样式由一个空格分隔的值string
定义。我基于starship.rs配置系统来定义语法。
您可以使用以下值来定义样式
underline
:在文本下方画线strikethrough
:用线划掉文本reverse
:反转当前终端颜色bold
:使用粗体字体italic
:使用斜体字体(如果终端支持的话)dimmed
:略微淡化前景颜色none
:重置任何颜色,使用终端的默认值。这将忽略样式定义中的任何其他规则fg:<color-name>
:使用指定的颜色作为前景(文本)颜色。可能的名称有black
、red
、yellow
、green
、blue
、purple
、cyan
、white
。您还可以使用它们的明亮版本,带有bright-*
前缀fg:<number>
:使用指定的 ANSI 颜色 号码作为前景颜色fg:#<hex>
:使用给定 RGB 颜色的十六进制表示作为前景颜色。例如fg:#ffbbcc
将是rgb(255, 187, 204)
bg:<color-name>
:与fg:
相同,但用于背景bg:<number>
:与fg:
相同,但用于背景bg:#<hex>
:与fg:
相同,但用于背景
对于颜色设置,这实际上取决于您的终端颜色功能。不过,大多数现代终端都允许您设置任何颜色。
模糊匹配算法
您可以在 fuzzaldrin-plus
包的仓库页面上的 README
中了解更多关于模糊匹配算法的信息。该算法中缺失的唯一部分是路径评分奖励。
在所有模糊匹配算法中,这是我最完整的一个,所以我决定尝试移植它。
开发
请参阅 贡献指南。
Neovim 集成
构建这个工具的主要原因是想有一个通用的模糊查找器,我可以在 Neovim 中使用。如果您也想这样做,您可以使用我的 scout.vim
插件。
常见问题解答
这比 X 好吗?
我不知道。也许?这完全取决于您的需求。我首先构建这个工具是为了学习 Rust,其次是因为我不太喜欢其他更重的工具。这并不意味着它更好或更差。它可能更简单。试一试 scout
,看看它是否适合您,如果不适合,就试用其他工具,这也很好。
这比 X 快吗?
说实话,我没有运行过任何基准测试。对我来说,它已经足够快了,很可能对大多数人来说也是如此。
这有用吗?
是的。
依赖项
~11-22MB
~318K SLoC