
Laboratoire de recherche en sécurité reproduisant la CVE-2026-41414 (pwn de pull_request_target dans .github/workflows/pr.yml) — instantané de skim-rs/skim @ ca986f4, pas un fork.
Artéfact de recherche automatisé — pas le projet en amont.
Ce dépôt est un laboratoire jetable construit par un harnais automatisé pour un mémoire de maîtrise à l'Université Laval sur la reproduction de vulnérabilités publiées dans les workflows GitHub Actions. Il s'agit d'un instantané verbatim de
skim-rs/skimau commitca986f444c37d2c1dc15ce1fad2fe101776af8d9(2026-04-14), redistribué sous la licence propre de ce projet, dont le fichier est inclus inchangé dans cet instantané.Le projet en amont n'est pas impliqué, n'est jamais ciblé, et la vulnérabilité étudiée ici est déjà publique. Chaque secret et variable dans ce dépôt est une valeur factice générée aléatoirement — aucun identifiant réel n'est présent. Les références d'actions et les images d'exécuteurs sont épinglées à ce qu'elles résolvaient au 2026-04-14 ; voir
pinning.mddans la sortie du harnais pour chaque modification apportée à l'instantané.Questions ou objections : [email protected]
La vie est courte, skim !
Nous passons tellement de temps à naviguer à travers les fichiers, les lignes et les commandes. C'est là que Skim entre en jeu ! C'est un puissant fuzzy finder conçu pour rendre votre flux de travail plus rapide et plus efficace.
Skim fournit un exécutable unique appelé sk. Considérez-le comme une alternative plus intelligente à des outils comme
grep — une fois que vous l'aurez essayé, vous vous demanderez comment vous avez pu vivre sans !
Le projet skim contient plusieurs composants :
sk — le programme principalsk dans Vim/Nvim. Consultez skim.vim pour le support Vim.| OS | Gestionnaire de paquets | Commande |
|---|---|---|
| macOS | Homebrew | brew install sk |
| macOS | MacPorts | sudo port install skim |
| Alpine | apk | apk add skim |
| Arch | pacman | pacman -S skim |
| Fedora | COPR | voir ci-dessous |
| Gentoo | Portage | emerge --ask app-misc/skim |
| Guix | guix | guix install skim |
| Void | XBPS | xbps-install -S skim |
Des paquets Fedora à jour sont fournis via un dépôt COPR non officiel maintenu par la communauté.```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim
## Manuellement
L’une des méthodes suivantes s’applique :
- Utiliser le script d’installation :
```sh
# Vérifiez toujours le contenu du script avant de l’exécuter !
$ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
```
- Utiliser le binaire : téléchargez simplement [l’exécutable sk](https://github.com/skim-rs/skim/releases) directement.
- Installer depuis [crates.io](https://crates.io/) : `cargo install skim`
- Compiler manuellement :
```sh
$ git clone --depth 1 [email protected]:skim-rs/skim.git ~/.skim
$ cd ~/.skim
$ cargo build --release
$ # Ajoutez l’exécutable `target/release/sk` résultant à votre PATH
```
Vous aurez alors accès à :
- La page de manuel, que vous pouvez soit écrire dans le chemin approprié, soit exécuter `man --local-file <(sk --man)`
- Les complétions du shell (et les raccourcis clavier optionnels), en utilisant `source <(sk --shell \<shell> \[--shell-bindings])`, voir ci-dessous pour plus de détails
# Utilisation
Skim peut être utilisé soit comme un filtre général (similaire à `grep`), soit comme une
interface interactive pour exécuter des commandes.
## Comme plugin Vim (sur neovim, consultez [fzf-lua](https://github.com/ibhagwan/fzf-lua) avec le profil skim)
Via vim-plug (recommandé) :
Installez skim, puis :```vim
Plug 'skim-rs/skim'
Voici quelques exemples pour vous aider à démarrer :```bash
sk
vim $(find . -name "*.rs" | sk -m)
Cette dernière commande vous permet de sélectionner des fichiers avec l'extension « .rs » et ouvre
vos sélections dans Vim — un véritable gain de temps pour les développeurs !
## En tant qu'interface interactive
`skim` peut invoquer d'autres commandes dynamiquement. Normalement, vous voudriez
l'intégrer avec [grep](https://www.gnu.org/software/grep/),
[ack](https://github.com/petdance/ack2),
[ag](https://github.com/ggreer/the_silver_searcher), ou
[rg](https://github.com/BurntSushi/ripgrep) pour rechercher des contenus dans un
répertoire de projet :```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}'
Remarque : Dans ces exemples,
{q}sera littéralement remplacé par la requête d'entrée actuelle (entourée de guillemets simples). Cela signifie que ces exemples rechercheront la chaîne de requête exacte, et non de manière floue. Pour une recherche floue, redirigez la sortie de la commande verssksans utiliser le mode interactif.

Des liaisons pour Fish, Bash et Zsh sont disponibles dans le répertoire shell :
completion.{shell} contient les scripts de complétion pour l'utilisation en ligne de commande de skkey-bindings.{shell} contient les raccourcis clavier et les intégrations shell :
ctrl-t pour sélectionner un fichier via skctrl-r pour sélectionner une entrée de l'historique via skalt-c pour cd dans un répertoire sélectionné via skfish) ** pour compléter les chemins de fichiers, par exemple ls **<tab> affichera un widget sk pour sélectionner un dossierPour activer ces fonctionnalités, sourcez le fichier key-bindings.{shell} et configurez les complétions selon la documentation de votre shell ou consultez ci-dessous.
Vous pouvez générer des complétions shell pour votre shell préféré en utilisant l'option --shell avec l'un des shells pris en charge : bash, zsh, fish, powershell ou elvish :
source <(sk --shell bash)
source <(sk --shell zsh)
sk --shell fish | source
#### Option 2 : Enregistrer dans un fichier à charger automatiquement au démarrage du 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
Quelques raccourcis clavier couramment utilisés :
| Touche | Action |
|---|---|
| Entrée | Accepter (sélectionner l'élément courant et quitter) |
| Échap/Ctrl-G | Abandonner |
| Ctrl-P/Flèche haut | Déplacer le curseur vers le haut |
| Ctrl-N/Flèche bas | Déplacer le curseur vers le bas |
| TAB | Basculer la sélection et descendre (avec -m) |
| Maj-TAB | Basculer la sélection et monter (avec -m) |
Pour une liste complète des raccourcis clavier, consultez la page de
manuel (man sk).
skim emprunte la syntaxe de fzf pour la correspondance des éléments :
| Jeton | Type de correspondance | Description |
|---|---|---|
text | correspondance floue | éléments qui correspondent à text |
^music | correspondance exacte par préfixe | éléments qui commencent par music |
.mp3$ | correspondance exacte par suffixe | éléments qui se terminent par .mp3 |
'wild | correspondance exacte (entre guillemets) | éléments qui incluent wild |
!fire | correspondance exacte inverse | éléments qui n'incluent pas fire |
!.mp3$ | correspondance exacte inverse par suffixe | éléments qui ne se terminent pas par .mp3 |
skim prend également en charge la combinaison de jetons.
L'espace blanc a le sens de ET. Avec le terme src main, skim recherchera
les éléments qui correspondent à la fois à src et à main.
| signifie OU (notez les espaces autour de |). Avec le terme .md$ | .markdown$, skim recherchera les éléments qui se terminent par .md ou
.markdown.
OU a une priorité plus élevée. Par exemple, readme .md$ | .markdown$ est interprété comme
readme ET (.md$ OU .markdown$).
Lors de l'utilisation de l'option --split-match, chaque partie autour des espaces ou de | sera mise en correspondance de manière fractionnée :
:) est absente de la requête, effectuez une correspondance normalerg pour correspondre à la fois sur le nom de fichier et le contenu.Si vous préférez utiliser des expressions régulières, skim propose un mode regex :```sh
sk --regex
Vous pouvez passer en mode `regex` dynamiquement en appuyant sur `Ctrl-R` (Rotate Mode).
## code de sortie
| Code de sortie | Signification |
|-----------|-------------------------------------|
| 0 | Sortie normale |
| 1 | Aucune correspondance trouvée |
| 130 | Interrompu par Ctrl-C/Ctrl-G/ESC/etc... |
# Outils compatibles avec `skim`
Ces outils sont ou visent à être compatibles avec `skim` :
## [Plugin neovim fzf-lua](https://github.com/ibhagwan/fzf-lua)
Un plugin [neovim](https://neovim.io) permettant d'utiliser fzf et skim pour naviguer dans votre code.
Installez-le avec votre gestionnaire de paquets, en suivant le README. Par exemple, avec `lazy.nvim` :```lua
{
"ibhagwan/fzf-lua",
-- enable `sk` support instead of the default `fzf`
opts = {'skim'}
}
Un plugin nushell permettant une meilleure interaction entre skim et nushell.
En suivant les instructions du README du plugin, vous pouvez l'installer avec cargo :```nu cargo install nu_plugin_skim plugin add ~/.cargo/bin/nu_plugin_skim
## [extension sqlite](https://github.com/tzachar/sqlite_skim)
Un module chargeable `sqlite` qui active une fonction `skim_score` dans les
requêtes SQL.
# Personnalisation
La documentation ici n'est qu'un aperçu, veuillez consulter la page de manuel (`man sk`) pour une
liste complète des options.
## Keymap
Spécifiez les liaisons avec des paires séparées par des virgules (aucun espace autorisé). Par exemple :```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'
De plus, utilisez + pour enchaîner les actions, comme execute-silent(echo {} | pbcopy)+abort.
Consultez la section KEY BINDINGS de la page de manuel pour plus de détails.
Il existe cinq clés de tri pour les résultats : score, index, begin, end, length. Vous pouvez
spécifier comment les enregistrements sont triés avec sk --tiebreak score,index,-begin ou tout
autre ordre de votre choix.
Vous avez probablement vos propres préférences esthétiques ! Heureusement, vous n'êtes pas limité à l'apparence par défaut - Skim prend en charge une personnalisation complète de son schéma de couleurs.```sh --color=[BASE_SCHEME][,COLOR:ANSI]
Skim respecte également la variable d'environnement `NO_COLOR`. Définissez-la à n'importe quelle valeur et `sk` (ainsi que de nombreuses autres applications de terminal) désactivera toute sortie colorée. Consultez [no-color.org](https://no-color.org/) pour plus de détails.
### Schémas de couleurs de base disponibles
Skim est livré avec plusieurs schémas de couleurs intégrés que vous pouvez utiliser comme point de départ :```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)
Vous pouvez personnaliser des éléments d'interface individuels en spécifiant des valeurs de couleur après le schéma de base :```sh sk --color=light,fg:232,bg:255,current_bg:116,info:27
Les couleurs peuvent être spécifiées de plusieurs manières :
- Couleurs ANSI (0-255) : `sk --color=fg:232,bg:255`
- Valeurs hexadécimales RGB : `sk --color=fg:#FF0000` (texte rouge)
### Options de personnalisation des couleurs disponibles
Les éléments d'interface suivants peuvent être personnalisés :
| Élément | Description | Exemple |
|--------------------|---------------------------------------------|--------------------------------|
| `fg` | Couleur de premier plan du texte normal | `--color=fg:232` |
| `bg` | Couleur d'arrière-plan du texte normal | `--color=bg:255` |
| `matched` | Texte correspondant dans les résultats | `--color=matched:108` |
| `matched_bg` | Arrière-plan du texte correspondant | `--color=matched_bg:0` |
| `current` | Couleur de premier plan de la ligne actuelle| `--color=current:254` |
| `current_bg` | Couleur d'arrière-plan de la ligne actuelle | `--color=current_bg:236` |
| `current_match` | Texte correspondant dans la ligne actuelle | `--color=current_match:151` |
| `current_match_bg` | Arrière-plan du texte correspondant dans la ligne actuelle | `--color=current_match_bg:236` |
| `spinner` | Couleur de l'indicateur de progression | `--color=spinner:148` |
| `info` | Couleur de la ligne d'information | `--color=info:144` |
| `prompt` | Couleur de l'invite | `--color=prompt:110` |
| `cursor` | Couleur du curseur | `--color=cursor:161` |
| `selected` | Couleur du marqueur d'élément sélectionné | `--color=selected:168` |
| `header` | Couleur du texte d'en-tête | `--color=header:109` |
| `border` | Couleur de la bordure pour l'aperçu/disposition | `--color=border:59` |
### Exemples```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
Pour plus de détails, consultez la page de manuel (man sk).
--ansi : pour analyser les codes de couleur ANSI (par exemple, \e[32mABC) de la source de données--regex : utilisez la requête comme expression régulière pour faire correspondre la source de donnéesEn mode interactif, vous pouvez invoquer une commande dynamiquement. Essayez-le :```sh sk --ansi -i -c 'rg --color=always --line-number {q}'
### Comment cela fonctionne-t-il ?

- Skim accepte deux types de sources : la sortie d'une commande ou une entrée redirigée (piped input)
- Skim dispose de deux types d'invites : une invite de requête pour spécifier le motif de recherche et une
invite de commande pour spécifier les « arguments » de la commande
- `-c` est utilisé pour spécifier la commande à exécuter et utilise par défaut `SKIM_DEFAULT_COMMAND`
- `-i` indique à skim d'ouvrir l'invite de commande au démarrage, qui affichera `c>` par défaut.
Pour affiner davantage les résultats renvoyés par la commande, appuyez sur
`Ctrl-Q` pour activer le mode interactif.
## Exécution de programmes externes
Vous pouvez configurer des raccourcis clavier pour lancer des processus externes sans quitter 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 propose plusieurs algorithmes, consultez l'aide ou la page de manuel pour une liste exhaustive. Parmi eux :
skim_v2, l'algorithme par défaut, librement inspiré de l'algorithme de fzffrizbee, utilise frizbee, l'algorithme résistant aux fautes de frappe du plugin neovim blink.cmp (x86_64 et aarch64 uniquement)fzy, basé sur l'algorithme de fzy étendu pour une résistance de base aux fautes de frappearinae, le tout nouvel algorithme de skim, conçu en interne avec la résistance aux fautes de frappe en tête, s'appuyant sur tous les précédents pour rendre la correspondance tolérante aux fautes de frappe plus naturelle tout en maintenant les performances par élément aux meilleurs standardsC'est une excellente fonctionnalité de fzf que skim emprunte. Par exemple, nous utilisons 'ag' pour
trouver les lignes correspondantes, et une fois que nous avons réduit la sélection aux lignes cibles, nous voulons
finalement décider quelles lignes choisir en vérifiant le contexte autour de la ligne.
grep et ag ont l'option --context, et skim peut tirer parti de --context pour
une meilleure fenêtre d'aperçu. Par exemple :```sh
sk --ansi -i -c 'ag --color {q}' --preview "preview.sh {}"
(Notez que [preview.sh](https://github.com/junegunn/fzf.vim/blob/master/bin/preview.sh) est un script qui affiche le contexte à partir de nomfichier:lignes:colonnes)
Vous obtenez des résultats comme ceci :

### Comment cela fonctionne-t-il ?
Si la commande d'aperçu est fournie via l'option `--preview`, skim remplacera
`{}` par la ligne actuellement surlignée entourée de guillemets simples, appellera
la commande pour obtenir la sortie, puis affichera cette sortie dans la fenêtre d'aperçu.
Parfois, vous n'avez pas besoin de la ligne entière pour invoquer la commande. Dans ce cas,
vous pouvez utiliser `{}`, `{1..}`, `{..3}` ou `{1..5}` pour sélectionner les champs. La
syntaxe est expliquée dans la section [Prise en charge des champs](#filds-support).
Enfin, vous pouvez configurer la position de la fenêtre d'aperçu avec `--preview-window` :
- `--preview-window up:30%` pour placer la fenêtre en position haute avec une hauteur
de 30 % de la hauteur totale de skim.
- `--preview-window left:10:wrap` pour spécifier que `wrap` permet à la fenêtre
d'aperçu de renvoyer à la ligne la sortie de la commande d'aperçu.
- `--preview-window wrap:hidden` pour masquer la fenêtre d'aperçu au démarrage ; elle
peut ensuite être affichée via l'action `toggle-preview`.
## Prise en charge des champs
Normalement, seuls les utilisateurs de plugins ont besoin de comprendre cela.
Par exemple, vous disposez d'une source de données au format :```sh
<filename>:<line number>:<column number>
Cependant, vous souhaitez rechercher <filename> uniquement lorsque vous tapez des requêtes. Cela
signifie que lorsque vous tapez 21, vous voulez trouver un <filename> qui contient 21,
mais sans correspondre au numéro de ligne ou au numéro de colonne.
Vous pouvez utiliser sk --delimiter ':' --nth 1 pour y parvenir.
Vous pouvez également utiliser --with-nth pour réorganiser l'ordre des champs.
Syntaxe des plages
<num> -- pour spécifier le num-ième champ, en commençant par 1.start.. -- à partir du start-ième champ et jusqu'à la fin...end -- à partir du champ 0, jusqu'au end-ième champ,
y compris end.start..end -- à partir du start-ième champ, jusqu'au end-ième
champ, y compris end.Skim peut être utilisé comme bibliothèque dans vos crates Rust.
Tout d'abord, ajoutez skim dans votre Cargo.toml :```toml
[dependencies]
skim = { version = "", default-features = false, features = [..] }
_Note sur les fonctionnalités_ :
- la fonctionnalité `cli` est requise pour utiliser skim en tant qu'outil en ligne de commande, elle *ne devrait* pas être nécessaire lorsqu'on l'utilise comme bibliothèque.
### Utilisation de base
Ensuite, essayez d'exécuter cet exemple simple :```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());
}
}
Vous pouvez également bénéficier d’une utilisation fine de skim en tant que bibliothèque grâce à tokio et au code asynchrone, ce qui vous permet d’interagir dynamiquement avec
Étant donné un Option<SkimItemReceiver>, skim lira les éléments en conséquence, fera son
travail et nous ramènera la sélection de l’utilisateur, y compris les éléments sélectionnés, la
requête, etc. Notez que :
SkimItemReceiver est crossbeam::channel::Receiver<Arc<dyn SkimItem>>Le trait SkimItem est fourni pour personnaliser la façon dont une ligne peut être affichée,
comparée et prévisualisée. Il est implémenté par défaut pour AsRef<str>
De plus, SkimItemReader est un assistant pour convertir un BufRead en
SkimItemReceiver (nous pouvons facilement transformer un File ou une String en BufRead),
afin que vous puissiez traiter facilement des chaînes ou des fichiers.
Consultez d’autres exemples dans le répertoire examples/.
Ces benchmarks exécutent l’interface interactive dans une session tmux et attendent que l’interface utilisateur se stabilise.

Vous pouvez générer les graphiques en utilisant just bench-plot ou en exécutant la recette manuellement dans GNU bash.
Skim invoque find . pour récupérer une liste de fichiers à filtrer. Vous pouvez remplacer
ce comportement en définissant la variable d’environnement SKIM_DEFAULT_COMMAND. Par exemple :```sh
$ SKIM_DEFAULT_COMMAND="fd --type f || git ls-tree -r --name-only HEAD || rg --files || find ."
$ sk
Vous pouvez l’ajouter à votre `.bashrc` ou `.zshrc` si vous souhaitez qu’il soit utilisé par défaut.
## Certains fichiers ne sont pas affichés dans le plugin Vim
Si vous utilisez le plugin Vim et exécutez la commande `:SK`, vous constaterez peut-être que certains
de vos fichiers ne sont pas affichés.
Comme décrit dans [#3](https://github.com/skim-rs/skim/issues/3), dans le plugin
Vim, `SKIM_DEFAULT_COMMAND` est défini par défaut sur la commande :```vim
let $SKIM_DEFAULT_COMMAND = "git ls-tree -r --name-only HEAD || rg --files || ag -l -g \"\" || find ."
Cela signifie que les fichiers non reconnus par git ne seront pas affichés. Vous pouvez soit remplacer la
valeur par défaut avec let $SKIM_DEFAULT_COMMAND = '', soit localiser vous-même les fichiers manquants.
fzf est un chercheur flou en ligne de commande écrit en Go, et skim tente d'en implémenter un nouveau en Rust !
Ce projet est écrit de zéro. Certaines décisions d'implémentation sont différentes de fzf. Par exemple :
skim dispose d'un mode interactif.skim prend en charge la pré-sélection.Plus généralement, les mainteneurs de skim s'autorisent une certaine liberté d'implémentation.
L'objectif est de garder skim aussi riche en fonctionnalités que fzf, mais les options de commande peuvent différer.
Créez de nouvelles issues si vous rencontrez des bogues ou si vous avez des idées. Les pull requests sont chaleureusement bienvenues.
Un Vagrantfile est inclus pour démarrer une VM Windows Server 2022 Core sans interface graphique afin de tester
la compatibilité Windows sans avoir besoin d'une interface graphique. Il nécessite VirtualBox
et Vagrant sur votre hôte (vagrant est inclus dans le shell de développement Nix
via flake.nix).```sh
vagrant up # First boot: downloads the box and provisions (~15–20 min)
ssh -p 2222 vagrant@localhost # Password: vagrant
À l'intérieur de la VM, la racine du projet est montée sur `C:\vagrant` :```powershell
cd C:\vagrant
cargo build
cargo test
Les démarrages suivants sont rapides — l’approvisionnement ne s’exécute qu’une seule fois :```sh vagrant halt # Stop the VM vagrant up # Resume vagrant destroy # Delete the VM entirely
# Dépannage
Pour diagnostiquer ce qui se passe, vous pouvez définir la variable d'environnement `SKIM_LOG` ou l'option `--log-level` sur `debug` ou même `trace`, et définir la variable d'environnement `SKIM_LOG_FILE` ou l'option `--log-file` vers un chemin. Vous pouvez ensuite consulter ces journaux pendant ou après l'exécution pour mieux comprendre ce qui se passe. N'hésitez pas à ajouter ces journaux à un problème si vous avez besoin d'aide.
## Problèmes de saut de ligne avec nix, FreeBSD, termux
Si vous rencontrez des problèmes d'affichage comme :```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
Par exemple
Vous devez définir TERMINFO ou TERMINFO_DIRS sur le chemin d'une base de données terminfo correcte
Par exemple, avec termux, vous pouvez ajouter ceci dans votre bashrc :``` export TERMINFO=/data/data/com.termux/files/usr/share/terminfo
# Benchmarks
## Benchmark interactif (`cli`)
Le benchmark `cli` compare skim (ou tout binaire compatible) à d'autres versions ou à fzf en exécutant l'interface interactive dans une session tmux et en interrogeant la ligne d'état jusqu'à ce que le nombre de correspondances se stabilise. Ce n'est en aucun cas une mesure précise ou infaillible, mais cela présente l'avantage supplémentaire de comparer à `fzf` et de fournir des métriques de ressources (pic RSS et 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
Les noms de binaires sont résolus en chemins absolus via which avant utilisation, donc les noms simples comme sk ou fzf fonctionnent tant qu'ils sont dans $PATH.
Des benchmarks de critères sont disponibles pour mesurer plus précisément les performances de skim.
Pour les exécuter, vous devez générer les données d'entrée avec cargo bench --bench cli -- -g benches/fixtures/10M.txt -n 10000000 && cargo bench --bench cli -- -g benches/fixtures/1M.txt -n 1000000, puis lancer cargo bench -j 1.
Ceux-ci prendront plusieurs minutes.