Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
gha-lab-456dd8a245 — 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. | Kitploit
Outils/GitHubGitHub/pvharmo2/gha-lab-456dd8a245
Analyse des VulnérabilitésExploitationSécurité de la Chaîne LogistiqueApprentissage et ÉducationRessources Organisées
GitHubpvharmo2/gha-lab-456dd8a245

gha-lab-456dd8a245

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.

Voir le dépôt
1il y a 6h 33mPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

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/skim au commit ca986f444c37d2c1dc15ce1fad2fe101776af8d9 (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.md dans la sortie du harnais pour chaque modification apportée à l'instantané.

Questions ou objections : [email protected]


Crates.io Build & Test codecov badge

Packaging status
Skim Discord
Skim Matrix room
Built with Ratatui

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 demo

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 !

Table des matières

  • Installation
    • Gestionnaires de paquets
    • Manuellement
  • Utilisation
    • Comme plugin Vim
    • Comme filtre
    • Comme interface interactive
    • Raccourcis shell
    • Raccourcis clavier
    • Syntaxe de recherche
    • code de sortie
  • Outils compatibles avec skim
    • Plugin neovim fzf-lua
    • nu_plugin_skim
  • Personnalisation
    • Mappage de touches
    • Critères de tri
    • Schéma de couleurs
    • Divers
  • Sujets avancés
    • Mode interactif
      • Comment ça marche ?
    • Exécution de programmes externes
    • Algorithmes
    • Fenêtre d'aperçu
      • Comment ça marche ?
    • Prise en charge des champs
    • Utilisation comme bibliothèque
    • Benchmarks
  • FAQ
    • Comment ignorer des fichiers ?
    • Certains fichiers ne sont pas affichés dans le plugin Vim
  • Différences avec fzf
  • Comment contribuer
    • Tests de compatibilité Windows
  • Dépannage
    • Problèmes de saut de ligne avec nix, FreeBSD, termux

Installation

Le projet skim contient plusieurs composants :

  1. L'exécutable sk — le programme principal
  2. Le plugin Vim/Nvim — pour appeler sk dans Vim/Nvim. Consultez skim.vim pour le support Vim.

Gestionnaires de paquets

OSGestionnaire de paquetsCommande
macOSHomebrewbrew install sk
macOSMacPortssudo port install skim
Alpineapkapk add skim
Archpacmanpacman -S skim
FedoraCOPRvoir ci-dessous
GentooPortageemerge --ask app-misc/skim
Guixguixguix install skim
VoidXBPSxbps-install -S skim
Packaging status

Fedora

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

root@kitploit:~
## 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'

Comme filtre

Voici quelques exemples pour vous aider à démarrer :```bash

directly invoke skim

sk

Or pipe some input to it (press TAB key to select multiple items when -m is enabled)

vim $(find . -name "*.rs" | sk -m)

root@kitploit:~
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 vers sk sans utiliser le mode interactif.

démo du mode interactif

Liaisons de shell

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 sk
  • key-bindings.{shell} contient les raccourcis clavier et les intégrations shell :
    • ctrl-t pour sélectionner un fichier via sk
    • ctrl-r pour sélectionner une entrée de l'historique via sk
    • alt-c pour cd dans un répertoire sélectionné via sk
    • (non disponible dans fish) ** pour compléter les chemins de fichiers, par exemple ls **<tab> affichera un widget sk pour sélectionner un dossier

Pour 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.

Complétions shell

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 :

Option 1 : Sourcez directement dans votre session shell actuelle```sh

For bash

source <(sk --shell bash)

For zsh

source <(sk --shell zsh)

For fish

sk --shell fish | source

root@kitploit:~
#### 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

Raccourcis clavier

Quelques raccourcis clavier couramment utilisés :

ToucheAction
EntréeAccepter (sélectionner l'élément courant et quitter)
Échap/Ctrl-GAbandonner
Ctrl-P/Flèche hautDéplacer le curseur vers le haut
Ctrl-N/Flèche basDéplacer le curseur vers le bas
TABBasculer la sélection et descendre (avec -m)
Maj-TABBasculer la sélection et monter (avec -m)

Pour une liste complète des raccourcis clavier, consultez la page de manuel (man sk).

Syntaxe de recherche

skim emprunte la syntaxe de fzf pour la correspondance des éléments :

JetonType de correspondanceDescription
textcorrespondance floueéléments qui correspondent à text
^musiccorrespondance exacte par préfixeéléments qui commencent par music
.mp3$correspondance exacte par suffixeéléments qui se terminent par .mp3
'wildcorrespondance exacte (entre guillemets)éléments qui incluent wild
!firecorrespondance 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 :

    • Si la valeur de l'option (par défaut :) est absente de la requête, effectuez une correspondance normale
    • Si elle est présente, faites correspondre tout ce qui précède à tout ce qui précède dans les éléments, et tout ce qui suit (y compris les autres occurrences potentielles du délimiteur) à la partie qui suit dans les éléments. Cela est particulièrement utile lors de l'envoi d'une entrée depuis rg 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

root@kitploit:~
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'}
}

nu_plugin_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

root@kitploit:~
## [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.

Critères de tri

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.

Schéma de couleurs

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]

root@kitploit:~
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)

Personnalisation des couleurs

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

root@kitploit:~
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).

Divers

  • --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ées

Sujets avancés

Mode interactif

En mode interactif, vous pouvez invoquer une commande dynamiquement. Essayez-le :```sh sk --ansi -i -c 'rg --color=always --line-number {q}'

root@kitploit:~
### Comment cela fonctionne-t-il ?

![Comment fonctionne le mode interactif de Skim](https://assets.kitploit.com/production/public/readmes/54416/5895df8cd6dbe8dfe20cafd1bf0b23fd690191710c00f811e110aba228b32a35/a7b995846d08eb2aa7f351371b38a9a35261eb393632363f62c6a67785f4038e-display-v1.webp)

- 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'

Algorithmes

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 fzf
  • frizbee, 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 frappe
  • arinae, 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 standards

Fenêtre d'aperçu

C'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 {}"

root@kitploit:~
(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 :

![aperçu de la démo](https://assets.kitploit.com/production/public/readmes/54416/b89dd1e40297ffc3fa4684c4a6d5dc9506c0eafdb881d4cea079ff843f1a271a/84156872f39354a97241078491506fee9f9962eda6628161f94f6f36ec2c79f9-display-v1.webp)

### 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.

Utilisation comme bibliothèque

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 = [..] }

root@kitploit:~
_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());
    }
}

Utilisation fine

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

Fonctionnement interne

É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>>
  • S’il est nul, il invoquera la commande donnée et lira les éléments depuis la sortie de la commande
  • Sinon, il lira les éléments depuis le canal (crossbeam).

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/.

Benchmarks

Ces benchmarks exécutent l’interface interactive dans une session tmux et attendent que l’interface utilisateur se stabilise.

graphiques de benchmark

Vous pouvez générer les graphiques en utilisant just bench-plot ou en exécutant la recette manuellement dans GNU bash.

FAQ

Comment ignorer des fichiers ?

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

root@kitploit:~
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.

Différences avec fzf

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 :

  1. skim dispose d'un mode interactif.
  2. skim prend en charge la pré-sélection.
  3. L'algorithme de recherche floue est différent.

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.

Comment contribuer

Créez de nouvelles issues si vous rencontrez des bogues ou si vous avez des idées. Les pull requests sont chaleureusement bienvenues.

Tests de compatibilité Windows

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

root@kitploit:~
À 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

root@kitploit:~
# 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

  • https://github.com/skim-rs/skim/issues/412
  • https://github.com/skim-rs/skim/issues/455

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

root@kitploit:~
# 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.

Benchmarks de critères

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.

Télécharger l’outil