
Laboratorio di ricerca sulla sicurezza che riproduce la CVE-2026-41414 (pull_request_target pwn in .github/workflows/pr.yml) — snapshot di skim-rs/skim @ ca986f4, non un fork.
Artefatto di ricerca automatizzato — non è il progetto upstream.
Questo repository è un laboratorio usa e getta costruito da un sistema automatizzato per una tesi magistrale presso l'Université Laval sulla riproduzione di vulnerabilità pubblicate nei workflow di GitHub Actions. È uno snapshot identico di
skim-rs/skimal commitca986f444c37d2c1dc15ce1fad2fe101776af8d9(2026-04-14), ridistribuito sotto la licenza del progetto stesso, il cui file è incluso invariato in questo snapshot.Il progetto upstream non è coinvolto, non è mai preso di mira, e la vulnerabilità studiata qui è già pubblica. Ogni segreto e variabile in questo repository è un valore fittizio generato casualmente — nessuna credenziale reale è presente. I riferimenti alle Action e le immagini dei runner sono bloccati a ciò che risolvevano al 2026-04-14; consulta
pinning.mdnell'output del sistema per ogni modifica apportata allo snapshot.Domande o obiezioni: [email protected]
La vita è breve, skim!
Passiamo così tanto tempo a navigare tra file, righe e comandi. È qui che entra in gioco Skim! È un potente fuzzy finder progettato per rendere il tuo flusso di lavoro più veloce ed efficiente.
Skim fornisce un singolo eseguibile chiamato sk. Pensalo come un'alternativa più intelligente a strumenti come
grep — una volta provato, ti chiederai come hai fatto a vivere senza!
Il progetto skim contiene diversi componenti:
sk — il programma principalesk all'interno di Vim/Nvim. Controlla skim.vim per il supporto Vim.| OS | Gestore di pacchetti | Comando |
|---|---|---|
| macOS | Homebrew | brew install sk |
| macOS | MacPorts | sudo port install skim |
| Alpine | apk | apk add skim |
| Arch | pacman | pacman -S skim |
| Fedora | COPR | vedi sotto |
| Gentoo | Portage | emerge --ask app-misc/skim |
| Guix | guix | guix install skim |
| Void | XBPS | xbps-install -S skim |
I pacchetti Fedora aggiornati sono forniti tramite un repository COPR non ufficiale mantenuto dalla comunità.```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim
## Manualmente
Si applica uno dei seguenti casi:
- Utilizzando lo script di installazione:
```sh
# Controlla sempre il contenuto dello script prima di eseguirlo!
$ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
```
- Utilizzando il binario: scarica semplicemente [l'eseguibile sk](https://github.com/skim-rs/skim/releases) direttamente.
- Installazione da [crates.io](https://crates.io/): `cargo install skim`
- Compilazione manuale:
```sh
$ git clone --depth 1 [email protected]:skim-rs/skim.git ~/.skim
$ cd ~/.skim
$ cargo build --release
$ # Aggiungi l'eseguibile `target/release/sk` risultante al tuo PATH
```
Avrai quindi accesso a:
- La pagina man, che puoi scrivere nel percorso corretto oppure eseguire `man --local-file <(sk --man)`
- Il completamento della shell (e le associazioni di tasti opzionali), utilizzando `source <(sk --shell \<shell> \[--shell-bindings])`, vedi sotto per i dettagli
# Utilizzo
Skim può essere utilizzato sia come filtro generale (simile a `grep`) sia come
interfaccia interattiva per eseguire comandi.
## Come plugin Vim (su neovim, dai un'occhiata a [fzf-lua](https://github.com/ibhagwan/fzf-lua) con il profilo skim)
Tramite vim-plug (consigliato):
Installa skim, poi:```vim
Plug 'skim-rs/skim'
Ecco alcuni esempi per iniziare:```bash
sk
vim $(find . -name "*.rs" | sk -m)
Quest'ultimo comando ti consente di selezionare file con estensione ".rs" e apre
le tue selezioni in Vim - un grande risparmio di tempo per gli sviluppatori!
## Come Interfaccia Interattiva
`skim` può invocare altri comandi dinamicamente. Normalmente vorresti
integrarlo con [grep](https://www.gnu.org/software/grep/),
[ack](https://github.com/petdance/ack2),
[ag](https://github.com/ggreer/the_silver_searcher), o
[rg](https://github.com/BurntSushi/ripgrep) per cercare contenuti in una
directory di progetto:```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}'
Nota: In questi esempi,
{q}verrà espanso letteralmente alla query di input corrente (racchiusa tra virgolette singole). Ciò significa che questi esempi cercheranno la stringa di query esatta, non in modo fuzzy. Per la ricerca fuzzy, convoglia l'output del comando insksenza usare la modalità interattiva.

I binding per Fish, Bash e Zsh sono disponibili nella directory shell:
completion.{shell} contiene gli script di completamento per l'uso CLI di skkey-bindings.{shell} contiene i tasti di scelta rapida e le integrazioni con la shell:
ctrl-t per selezionare un file tramite skctrl-r per selezionare una voce della cronologia tramite skalt-c per eseguire cd in una directory selezionata tramite skfish) ** per completare i percorsi dei file, ad esempio ls **<tab> mostrerà un widget sk per selezionare una cartellaPer abilitare queste funzionalità, carica il file key-bindings.{shell} e configura i completamenti secondo la documentazione della tua shell o vedi sotto.
Puoi generare i completamenti di shell per la tua shell preferita usando il flag --shell con una delle shell supportate: bash, zsh, fish, powershell o elvish:
source <(sk --shell bash)
source <(sk --shell zsh)
sk --shell fish | source
#### Opzione 2: Salvataggio in un file da caricare automaticamente all'avvio della 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
Alcune combinazioni di tasti comunemente usate:
| Tasto | Azione |
|---|---|
| Invio | Accetta (seleziona quello corrente ed esci) |
| ESC/Ctrl-G | Interrompi |
| Ctrl-P/Freccia su | Sposta il cursore in alto |
| Ctrl-N/Freccia giù | Sposta il cursore in basso |
| TAB | Attiva/disattiva la selezione e scendi (con -m) |
| Shift-TAB | Attiva/disattiva la selezione e sali (con -m) |
Per un elenco completo delle combinazioni di tasti, consulta la pagina
man (man sk).
skim riprende la sintassi di fzf per la corrispondenza degli elementi:
| Token | Tipo di corrispondenza | Descrizione |
|---|---|---|
text | corrispondenza fuzzy | elementi che corrispondono a text |
^music | corrispondenza esatta con prefisso | elementi che iniziano con music |
.mp3$ | corrispondenza esatta con suffisso | elementi che terminano con .mp3 |
'wild | corrispondenza esatta (tra virgolette) | elementi che includono wild |
!fire | corrispondenza esatta inversa | elementi che non includono fire |
!.mp3$ | corrispondenza esatta con suffisso inverso | elementi che non terminano con .mp3 |
skim supporta anche la combinazione di token.
Lo spazio bianco ha il significato di AND. Con il termine src main, skim cercherà
elementi che corrispondono sia a src che a main.
| significa OR (nota gli spazi attorno a |). Con il termine .md$ | .markdown$, skim cercherà elementi che terminano con .md o
.markdown.
OR ha precedenza maggiore. Ad esempio, readme .md$ | .markdown$ viene interpretato come
readme AND (.md$ OR .markdown$).
Quando si utilizza l'opzione --split-match, ogni parte attorno a spazi o | verrà confrontata in modo suddiviso:
:) è assente dalla query, esegui una corrispondenza normalerg per confrontare sia il nome del file che il contenuto.Se preferisci usare le espressioni regolari, skim offre una modalità regex:```sh
sk --regex
Puoi passare alla modalità `regex` dinamicamente premendo `Ctrl-R` (Rotate Mode).
## exit code
| Exit Code | Significato |
|-----------|------------------------------------|
| 0 | Uscita normale |
| 1 | Nessuna corrispondenza trovata |
| 130 | Interrotto da Ctrl-C/Ctrl-G/ESC/ecc... |
# Strumenti compatibili con `skim`
Questi strumenti sono o mirano a essere compatibili con `skim`:
## [plugin neovim fzf-lua](https://github.com/ibhagwan/fzf-lua)
Un plugin per [neovim](https://neovim.io) che consente di usare fzf e skim per navigare nel tuo codice.
Installalo con il tuo gestore di pacchetti, seguendo il README. Ad esempio, con `lazy.nvim`:```lua
{
"ibhagwan/fzf-lua",
-- enable `sk` support instead of the default `fzf`
opts = {'skim'}
}
Un plugin per nushell che consente una migliore interazione tra skim e nushell.
Seguendo le istruzioni nel README del plugin, puoi installarlo con cargo:```nu cargo install nu_plugin_skim plugin add ~/.cargo/bin/nu_plugin_skim
## [estensione sqlite](https://github.com/tzachar/sqlite_skim)
Un modulo caricabile di `sqlite` che abilita una funzione `skim_score` nelle
query SQL.
# Personalizzazione
La documentazione qui è solo un'anteprima, consulta la pagina man (`man sk`) per un
elenco completo delle opzioni.
## Keymap
Specifica i binding con coppie separate da virgola (senza spazi). Ad esempio:```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'
Inoltre, usa + per concatenare azioni, come execute-silent(echo {} | pbcopy)+abort.
Consulta la sezione KEY BINDINGS della pagina man per i dettagli.
Ci sono cinque chiavi di ordinamento per i risultati: score, index, begin, end, length. Puoi
specificare come vengono ordinati i record con sk --tiebreak score,index,-begin o in qualsiasi
altro ordine desideri.
Probabilmente hai le tue preferenze estetiche! Fortunatamente, non sei limitato all'aspetto predefinito: Skim supporta una personalizzazione completa del suo schema colori.```sh --color=[BASE_SCHEME][,COLOR:ANSI]
Skim rispetta anche la variabile d'ambiente `NO_COLOR`. Impostala a qualsiasi valore e `sk` (e molte altre applicazioni da terminale) disabiliterà ogni output colorato. Consulta [no-color.org](https://no-color.org/) per maggiori dettagli.
### Schemi di Colore di Base Disponibili
Skim include diversi schemi di colore integrati che puoi usare come punto di partenza:```sh
sk --color=dark # Default dark theme (256 colors)
sk --color=light # Light theme (256 colors)
sk --color=16 # Simple 16-color theme
sk --color=bw # Minimal black & white theme (no colors, just styles)
sk --color=none # Minimal black & white theme (no colors, no styles)
sk --color=molokai # Molokai-inspired theme (256 colors)
Puoi personalizzare singoli elementi dell'interfaccia specificando valori di colore dopo lo schema di base:```sh sk --color=light,fg:232,bg:255,current_bg:116,info:27
I colori possono essere specificati in diversi modi:
- Colori ANSI (0-255): `sk --color=fg:232,bg:255`
- Valori esadecimali RGB: `sk --color=fg:#FF0000` (testo rosso)
### Opzioni di Personalizzazione Colore Disponibili
I seguenti elementi dell'interfaccia possono essere personalizzati:
| Elemento | Descrizione | Esempio |
|--------------------|---------------------------------------------|--------------------------------|
| `fg` | Colore del testo normale in primo piano | `--color=fg:232` |
| `bg` | Colore dello sfondo del testo normale | `--color=bg:255` |
| `matched` | Testo corrispondente nei risultati di ricerca | `--color=matched:108` |
| `matched_bg` | Sfondo del testo corrispondente | `--color=matched_bg:0` |
| `current` | Colore del testo della riga corrente | `--color=current:254` |
| `current_bg` | Colore dello sfondo della riga corrente | `--color=current_bg:236` |
| `current_match` | Testo corrispondente nella riga corrente | `--color=current_match:151` |
| `current_match_bg` | Sfondo del testo corrispondente nella riga corrente | `--color=current_match_bg:236` |
| `spinner` | Colore dell'indicatore di avanzamento | `--color=spinner:148` |
| `info` | Colore della riga informativa | `--color=info:144` |
| `prompt` | Colore del prompt | `--color=prompt:110` |
| `cursor` | Colore del cursore | `--color=cursor:161` |
| `selected` | Colore del marcatore dell'elemento selezionato | `--color=selected:168` |
| `header` | Colore del testo dell'intestazione | `--color=header:109` |
| `border` | Colore del bordo per anteprima/layout | `--color=border:59` |
### Esempi```sh
# Use light theme but change the current line background
sk --color=light,current_bg:24
# Custom theme with multiple colors
sk --color=dark,matched:#00FF00,current:#FFFFFF,current_bg:#000080
# High contrast theme
sk --color=fg:232,bg:255,matched:160,current:255,current_bg:20
Per maggiori dettagli, consulta la pagina man (man sk).
--ansi: per analizzare i codici colore ANSI (ad es., \e[32mABC) della sorgente dati--regex: usa la query come espressione regolare per confrontare la sorgente datiIn modalità interattiva, puoi richiamare un comando dinamicamente. Provala:```sh sk --ansi -i -c 'rg --color=always --line-number {q}'
### Come funziona?

- Skim accetta due tipi di sorgenti: output di comandi o input tramite pipe
- Skim ha due tipi di prompt: un prompt di query per specificare il pattern di ricerca e un
prompt di comando per specificare gli "argomenti" del comando
- `-c` viene usato per specificare il comando da eseguire e il default è `SKIM_DEFAULT_COMMAND`
- `-i` dice a skim di aprire il prompt di comando all'avvio, che mostrerà `c>` di default.
Per restringere ulteriormente i risultati restituiti dal comando, premi
`Ctrl-Q` per attivare la modalità interattiva.
## Esecuzione di programmi esterni
Puoi configurare le scorciatoie da tastiera per avviare processi esterni senza uscire da Skim (`execute`, `execute-silent`).```sh
# Press F1 to open the file with less without leaving skim
# Press CTRL-Y to copy the line to clipboard and aborts skim (requires pbcopy)
sk --bind 'f1:execute(less -f {}),ctrl-y:execute-silent(echo {} | pbcopy)+abort'
Skim offre molteplici algoritmi, consulta l'help o la manpage per un elenco esaustivo. Tra questi:
skim_v2, l'algoritmo predefinito, vagamente basato sull'algoritmo di fzffrizbee, utilizza frizbee, l'algoritmo resistente ai refusi del plugin neovim blink.cmp (solo x86_64 e aarch64)fzy, basato sull'algoritmo di fzy ampliato per una resistenza di base ai refusiarinae, il più recente algoritmo di skim, progettato internamente con la resistenza ai refusi in mente, che amplia tutti i precedenti per rendere il matching resistente ai refusi più naturale mantenendo al contempo le prestazioni per singolo elemento ai massimi standardQuesta è una grande funzionalità di fzf che skim riprende. Ad esempio, usiamo 'ag' per
trovare le righe corrispondenti e, una volta ristretto il campo alle righe target, vogliamo
infine decidere quali righe selezionare controllando il contesto attorno alla riga.
grep e ag hanno l'opzione --context, e skim può sfruttare --context per
una migliore finestra di anteprima. Ad esempio:```sh
sk --ansi -i -c 'ag --color {q}' --preview "preview.sh {}"
(Nota che [preview.sh](https://github.com/junegunn/fzf.vim/blob/master/bin/preview.sh) è uno script per stampare il contesto dato filename:righe:colonne)
Ottieni risultati come questo:

### Come funziona?
Se il comando di anteprima viene fornito tramite l'opzione `--preview`, skim sostituirà
`{}` con la riga attualmente evidenziata racchiusa tra virgolette singole, chiamerà il
comando per ottenere l'output e stamperà l'output nella finestra di anteprima.
A volte non hai bisogno dell'intera riga per invocare il comando. In questo caso
puoi usare `{}`, `{1..}`, `{..3}` o `{1..5}` per selezionare i campi. La
sintassi è spiegata nella sezione [Supporto campi](#filds-support).
Infine, potresti voler configurare la posizione della finestra di anteprima con `--preview-window`:
- `--preview-window up:30%` per posizionare la finestra in alto con un'altezza
pari al 30% dell'altezza totale di skim.
- `--preview-window left:10:wrap` per specificare che `wrap` consente alla finestra
di anteprima di andare a capo nell'output del comando di anteprima.
- `--preview-window wrap:hidden` per nascondere la finestra di anteprima all'avvio; in seguito
può essere mostrata tramite l'azione `toggle-preview`.
## Supporto campi
Normalmente solo gli utenti di plugin devono comprendere questa parte.
Ad esempio, hai la sorgente dati con il formato:```sh
<filename>:<line number>:<column number>
Tuttavia, vuoi cercare <filename> solo quando digiti nelle query. Questo
significa che quando digiti 21, vuoi trovare un <filename> che contenga 21,
ma senza corrispondere al numero di riga o al numero di colonna.
Puoi usare sk --delimiter ':' --nth 1 per ottenere questo risultato.
Puoi anche usare --with-nth per riorganizzare l'ordine dei campi.
Sintassi degli intervalli
<num> -- per specificare l'num-esimo campo, a partire da 1.start.. -- a partire dall'start-esimo campo e il resto...end -- a partire dal campo 0-esimo, fino al campo end-esimo,
incluso end.start..end -- a partire dal campo start-esimo, fino al campo end-esimo,
incluso end.Skim può essere usato come libreria nei tuoi crate Rust.
Per prima cosa, aggiungi skim al tuo Cargo.toml:```toml
[dependencies]
skim = { version = "", default-features = false, features = [..] }
_Nota sulle funzionalità_:
- la funzionalità `cli` è necessaria per usare skim come cli, *non* dovrebbe essere necessaria quando lo si usa come libreria.
### Utilizzo di base
Poi prova a eseguire questo semplice esempio:```rust
extern crate skim;
use skim::prelude::*;
use std::io::Cursor;
pub fn main() {
let options = SkimOptionsBuilder::default()
.height("50%")
.multi(true)
.build()
.unwrap();
let input = "aaaaa\nbbbb\nccc".to_string();
// `SkimItemReader` is a helper to turn any `BufRead` into a stream of `SkimItem`
// `SkimItem` was implemented for `AsRef<str>` by default
let item_reader = SkimItemReader::default();
let items = item_reader.of_bufread(Cursor::new(input));
// `run_with` would read and show items from the stream
let selected_items = Skim::run_with(&options, Some(items))
.map(|out| out.selected_items)
.unwrap_or_else(|| Vec::new());
for item in selected_items.iter() {
println!("{}", item.output());
}
}
Puoi anche ottenere un utilizzo granulare di skim come libreria usando tokio e codice asincrono, permettendoti di interagire dinamicamente con
Dato un Option<SkimItemReceiver>, skim leggerà gli elementi di conseguenza, svolgerà il suo
lavoro e ci restituirà la selezione dell'utente, inclusi gli elementi selezionati, la
query, ecc. Nota che:
SkimItemReceiver è crossbeam::channel::Receiver<Arc<dyn SkimItem>>none, invocherà il comando fornito e leggerà gli elementi dall'output del comandoIl trait SkimItem è fornito per personalizzare come una riga può essere visualizzata,
confrontata e visualizzata in anteprima. È implementato per impostazione predefinita per AsRef<str>
Inoltre, SkimItemReader è un helper per convertire un BufRead in
SkimItemReceiver (possiamo facilmente trasformare un File o String in BufRead),
così da poter gestire facilmente stringhe o file.
Consulta altri esempi nella directory examples/.
Questo benchmark esegue l'interfaccia interattiva in una sessione tmux e attende che l'interfaccia utente si stabilizzi.

Puoi generare i grafici usando just bench-plot o eseguendo la ricetta manualmente in GNU bash.
Skim invoca find . per recuperare un elenco di file da filtrare. Puoi sovrascrivere
questo comportamento impostando la variabile d'ambiente SKIM_DEFAULT_COMMAND. Ad esempio:```sh
$ SKIM_DEFAULT_COMMAND="fd --type f || git ls-tree -r --name-only HEAD || rg --files || find ."
$ sk
Puoi inserirlo nel tuo `.bashrc` o `.zshrc` se vuoi che sia il comportamento predefinito.
## Alcuni file non vengono mostrati nel plugin Vim
Se usi il plugin Vim ed esegui il comando `:SK`, potresti notare che alcuni
dei tuoi file non vengono mostrati.
Come descritto in [#3](https://github.com/skim-rs/skim/issues/3), nel plugin
Vim, `SKIM_DEFAULT_COMMAND` è impostato al comando per impostazione predefinita:```vim
let $SKIM_DEFAULT_COMMAND = "git ls-tree -r --name-only HEAD || rg --files || ag -l -g \"\" || find ."
Questo significa che i file non riconosciuti da git non verranno mostrati. Puoi sovrascrivere il
valore predefinito con let $SKIM_DEFAULT_COMMAND = '' oppure individuare tu stesso i file mancanti.
fzf è un fuzzy finder da riga di comando scritto in Go e skim cerca di implementarne uno nuovo in Rust!
Questo progetto è scritto da zero. Alcune decisioni di implementazione sono diverse da fzf. Ad esempio:
skim ha una modalità interattiva.skim supporta la pre-selezione.Più in generale, i manutentori di skim si concedono una certa libertà di implementazione.
L'obiettivo è mantenere skim ricco di funzionalità quanto fzf, ma i flag dei comandi potrebbero differire.
Crea nuove issue se incontri bug o hai idee. Le pull request sono benvenute.
È incluso un Vagrantfile per avviare una VM headless Windows Server 2022 Core per testare
la compatibilità con Windows senza bisogno di una GUI. Richiede VirtualBox
e Vagrant sul tuo host (vagrant è incluso nella shell di sviluppo
Nix tramite flake.nix).```sh
vagrant up # First boot: downloads the box and provisions (~15–20 min)
ssh -p 2222 vagrant@localhost # Password: vagrant
Dentro della VM, la root del progetto è montata su `C:\vagrant`:```powershell
cd C:\vagrant
cargo build
cargo test
I successivi avvii sono rapidi — il provisioning viene eseguito solo una volta:```sh vagrant halt # Stop the VM vagrant up # Resume vagrant destroy # Delete the VM entirely
# Risoluzione dei problemi
Per capire cosa sta succedendo, puoi impostare la variabile d'ambiente `SKIM_LOG` o il flag `--log-level` su `debug` o addirittura `trace`, e impostare la variabile d'ambiente `SKIM_LOG_FILE` o il flag `--log-file` su un percorso. Puoi quindi leggere questi log durante o dopo l'esecuzione per comprendere meglio cosa sta accadendo. Non esitare ad aggiungere questi log a un issue se hai bisogno di aiuto.
## Problemi di mancanza di avanzamento riga con nix, FreeBSD, termux
Se riscontri problemi di visualizzazione come:```bash
$ for n in {1..10}; do echo "$n"; done | sk
0/10 0/0.> 10/10 10 9 8 7 6 5 4 3 2> 1
Ad esempio
Devi impostare TERMINFO o TERMINFO_DIRS sul percorso di un database terminfo corretto
Ad esempio, con termux, puoi aggiungere questo nel tuo bashrc:``` export TERMINFO=/data/data/com.termux/files/usr/share/terminfo
# Benchmark
## Benchmark interattivo (`cli`)
Il benchmark `cli` confronta skim (o qualsiasi binario compatibile) con altre versioni o con fzf eseguendo l'interfaccia interattiva all'interno di una sessione tmux e interrogando la riga di stato finché il conteggio delle corrispondenze non si stabilizza. Non è affatto una misurazione precisa o infallibile, ma ha il vantaggio aggiuntivo di confrontarsi con `fzf` e di fornire metriche sulle risorse (picco di RSS e CPU).```sh
cargo bench --bench cli -- run # defaults: sk, 1 M items, query "test"
cargo bench --bench cli -- run sk -n 500000 -q foo # bare name resolved via $PATH
cargo bench --bench cli -- run ./old/sk ./new/sk -r 5 # compare two binaries, 5 runs each
cargo bench --bench cli -- run sk -f input.txt -q search # use an existing file
cargo bench --bench cli -- generate -f testdata.txt -n 2000000 # generate input file and exit
cargo bench --bench cli -- run sk --perf # record perf data (auto-named file)
cargo bench --bench cli -- run sk --strace # record strace data (auto-named file)
cargo bench --bench cli -- run sk -p perf.data # record perf data to perf.data
cargo bench --bench cli -- run sk -j # JSON output
cargo bench --bench cli -- run sk -r 3 -- --tiebreak=index # pass extra flags to sk
I nomi dei binari vengono risolti in percorsi assoluti tramite which prima dell'uso, quindi nomi semplici come sk o fzf funzionano purché siano presenti in $PATH.
I benchmark di criterio sono disponibili per misurare le prestazioni di skim in modo più preciso.
Per eseguirli, devi generare i dati di input usando cargo bench --bench cli -- -g benches/fixtures/10M.txt -n 10000000 && cargo bench --bench cli -- -g benches/fixtures/1M.txt -n 1000000, quindi esegui cargo bench -j 1.
Questi richiederanno alcuni minuti per essere completati.