自动化研究产物 — 并非上游项目。
本仓库是由自动化工具链为拉瓦尔大学(Université Laval)硕士论文构建的一次性实验环境,用于复现已发表的 GitHub Actions 工作流漏洞。它是
skim-rs/skim在提交ca986f444c37d2c1dc15ce1fad2fe101776af8d9(2026-04-14)时的逐字快照,依据该项目自身的许可证重新分发,该许可证文件已原样包含在本快照中。上游项目未参与其中,也从未成为攻击目标,此处研究的漏洞已公开。本仓库中的每个密钥和变量均为随机生成的虚拟值——不存在任何真实凭据。操作引用和运行器镜像均固定为 2026-04-14 时解析到的版本;有关对快照所做的每项更改,请参阅工具链输出中的
pinning.md。如有疑问或异议:[email protected]
人生苦短,用 skim!
我们花费大量时间在文件、代码行和命令之间穿梭。这正是 Skim 的用武之地! 它是一款强大的模糊查找器,旨在让你的工作流程更快、更高效。
Skim 提供一个名为 sk 的单一可执行文件。可以把它视为 grep 等工具的更智能替代品——一旦你尝试过,就会惊叹于没有它的日子是怎么过的!
skim 项目包含以下几个组件:
sk 可执行文件——核心程序sk。有关 Vim 支持,请查看 skim.vim。| 操作系统 | 包管理器 | 命令 |
|---|---|---|
| macOS | Homebrew | brew install sk |
| macOS | MacPorts | sudo port install skim |
| Alpine | apk | apk add skim |
| Arch | pacman | pacman -S skim |
| Fedora | COPR | 见下文 |
| Gentoo | Portage | emerge --ask app-misc/skim |
| Guix | guix | guix install skim |
| Void | XBPS | xbps-install -S skim |
最新版本的 Fedora 软件包通过非官方的社区维护 COPR 仓库提供。```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim
## 手动安装
以下任一方式均可:
- 使用安装脚本:
```sh
# 运行前务必检查脚本内容!
$ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
```
- 使用二进制文件:直接[下载 sk 可执行文件](https://github.com/skim-rs/skim/releases)。
- 从 [crates.io](https://crates.io/) 安装:`cargo install skim`
- 手动构建:
```sh
$ git clone --depth 1 [email protected]:skim-rs/skim.git ~/.skim
$ cd ~/.skim
$ cargo build --release
$ # 将生成的 `target/release/sk` 可执行文件添加到你的 PATH 中
```
之后你将可以使用:
- 手册页,你可以将其写入正确路径,或运行 `man --local-file <(sk --man)`
- Shell 补全(以及可选按键绑定),使用 `source <(sk --shell \<shell> \[--shell-bindings])`,详见下文
# 用法
Skim 既可以作为通用过滤器(类似于 `grep`)使用,也可以作为运行命令的交互式界面使用。
## 作为 Vim 插件(在 neovim 上,请查看带 skim 配置文件的 [fzf-lua](https://github.com/ibhagwan/fzf-lua))
通过 vim-plug(推荐):
安装 skim,然后:```vim
Plug 'skim-rs/skim'
以下是一些入门示例:```bash
sk
vim $(find . -name "*.rs" | sk -m)
最后这条命令让你选择扩展名为“.rs”的文件,并在 Vim 中打开所选内容——对开发者来说,这能节省大量时间!
## 作为交互式界面
`skim` 可以动态调用其他命令。通常,你会希望将其与 [grep](https://www.gnu.org/software/grep/)、
[ack](https://github.com/petdance/ack2)、
[ag](https://github.com/ggreer/the_silver_searcher) 或
[rg](https://github.com/BurntSushi/ripgrep) 集成,用于在项目目录中搜索内容:```sh
# works with grep
sk --ansi -i -c 'grep -rI --color=always --line-number {q} .'
# works with ack
sk --ansi -i -c 'ack --color {q}'
# works with ag
sk --ansi -i -c 'ag --color {q}'
# works with rg
sk --ansi -i -c 'rg --color=always --line-number {q}'
注意:在这些示例中,
{q}会被字面展开为当前输入查询(用单引号包裹)。 这意味着这些示例将搜索精确的查询字符串,而非模糊匹配。 如需模糊搜索,请将命令输出通过管道传给sk,而不要使用交互模式。

Fish、Bash 和 Zsh 的绑定位于 shell 目录中:
completion.{shell} 包含用于 sk 命令行使用的补全脚本key-bindings.{shell} 包含按键绑定和 shell 集成:
ctrl-t 通过 sk 选择文件ctrl-r 通过 sk 选择历史记录条目alt-c 通过 sk 选择目录并 cd 进入fish 中不可用)** 用于补全文件路径,例如 ls **<tab> 将显示一个 sk 小部件以选择文件夹要启用这些功能,请根据你的 shell 文档加载 key-bindings.{shell} 文件并设置补全,或参见下文。
你可以使用 --shell 标志为你的首选 shell 生成补全,支持的 shell 包括:bash、zsh、fish、powershell 或 elvish:
source <(sk --shell bash)
source <(sk --shell zsh)
sk --shell fish | source
#### 选项 2:保存到文件,以便在 Shell 启动时自动加载```sh
# For bash, add to ~/.bashrc
echo 'source <(sk --shell bash)' >> ~/.bashrc # Or save to ~/.bash_completion
# For zsh, add to ~/.zshrc
sk --shell zsh > ~/.zfunc/_sk # Create ~/.zfunc directory and add to fpath in ~/.zshrc
# For fish, add to ~/.config/fish/completions/
sk --shell fish > ~/.config/fish/completions/sk.fish
一些常用的按键绑定:
| 按键 | 操作 |
|---|---|
| Enter | 接受(选择当前项并退出) |
| ESC/Ctrl-G | 中止 |
| Ctrl-P/上箭头 | 光标上移 |
| Ctrl-N/下箭头 | 光标下移 |
| TAB | 切换选择并下移(配合 -m) |
| Shift-TAB | 切换选择并上移(配合 -m) |
如需完整的按键绑定列表,请参阅 man
page(man sk)。
skim 借用了 fzf 的匹配项语法: