1 个不稳定版本
0.1.0 | 2020 年 4 月 28 日 |
---|
#1567 in 开发工具
16KB
244 行
goldfish
这是一个由只写日志文件支持的简单 LRU 缓存。我使用它与 cd
、neovim
和 fzf
一起使用,以便通过模糊搜索快速访问最近查看的目录和最近编辑的文件。它旨在成为像 z
这样的工具的更透明替代品,因此不会尝试预测或排序任何内容。它还支持通过 --cache
标志使用多个缓存。
goldfish
实现了对目录和文件路径的缓存的第一类支持,即它会 a) 规范化 路径,并在 b) 在将其存储在缓存中之前检查路径是否为文件或目录。这意味着路径应该从任何工作目录都是有效的,因此您可以始终使用 cd
切换到或编辑它们。此行为可以通过将 --type
(-t
) 标志传递给 goldfish put
来启用,例如:
> goldfish --cache files put --type file src/foo.rs
> goldfish --cache files put --type file src/
> goldfish --cache files get
/home/nwtnni/projects/example/src/foo.rs
用法
goldfish
相当底层,旨在从 shell 脚本或别名中调用。例如,以下是我在 Bash 中使用的用于更改目录的函数:
# Open a directory, list its contents, and cache its path.
#
# If no directory is provided, then use `fzf` to select from the directory cache.
o() {
if [ -z "$1" ]; then
dir=$(goldfish --cache directories get | fzf)
if [ ! -z "$dir" ]; then o "$dir"; fi
else
cd "$1" && ls && goldfish --cache directories put --type dir "$1"
fi
}
使用 --help
标志可以查看更详细的选项,即 goldfish --help
。
安装
目前需要 Rust 安装,并且只能从以下来源获取:
> cargo install goldfish
- 从源码构建
> git clone https://github.com/nwtnni/goldfish.git
> cargo build --release
> ./target/release/goldfish
实现
日志条目只是数据后面跟着一个 u16
长度尾部。这允许追加操作盲目地将数据写入文件末尾。读取日志是从后往前进行的,从最后两个字节开始,然后回退以获取每份数据,这使得我们能够避免读取整个文件并有效地构建最新条目的集合。
(我不太确定反向读取文件对缓存或预取等性能的影响。这需要一些基准测试。)
免责声明
有几篇文章指出,金鱼实际上有相当不错的 记忆力 范围,这与流行观念相反,但我找不到很多资料。我发现最接近的是这篇广播稿和这个科学项目。
依赖关系
~4.5MB
~75K SLoC