Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
gha-lab-456dd8a245 — 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. | Kitploit
Strumenti/GitHubGitHub/pvharmo2/gha-lab-456dd8a245
Analisi delle VulnerabilitàExploitSicurezza della Supply ChainApprendimento e FormazioneRisorse Curate
GitHubpvharmo2/gha-lab-456dd8a245

gha-lab-456dd8a245

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.

Vedi Repository
16h 32m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

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/skim al commit ca986f444c37d2c1dc15ce1fad2fe101776af8d9 (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.md nell'output del sistema per ogni modifica apportata allo snapshot.

Domande o obiezioni: [email protected]


Crates.io Build & Test codecov badge

Packaging status
Skim Discord
Skim Matrix room
Built with Ratatui

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 demo

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!

Indice dei contenuti

  • Installazione
    • Gestori di pacchetti
    • Manualmente
  • Utilizzo
    • Come plugin Vim
    • Come filtro
    • Come interfaccia interattiva
    • Associazioni di shell
    • Associazioni di tasti
    • Sintassi di ricerca
    • codice di uscita
  • Strumenti compatibili con skim
    • Plugin neovim fzf-lua
    • nu_plugin_skim
  • Personalizzazione
    • Mappa dei tasti
    • Criteri di ordinamento
    • Schema di colori
    • Varie
  • Argomenti avanzati
    • Modalità interattiva
      • Come funziona?
    • Esecuzione di programmi esterni
    • Algoritmi
    • Finestra di anteprima
      • Come funziona?
    • Supporto dei campi
    • Uso come libreria
    • Benchmark
  • FAQ
    • Come ignorare i file?
    • Alcuni file non vengono mostrati nel plugin Vim
  • Differenze rispetto a fzf
  • Come contribuire
    • Test di compatibilità Windows
  • Risoluzione dei problemi
    • Problemi di avanzamento riga con nix, FreeBSD, termux

Installazione

Il progetto skim contiene diversi componenti:

  1. Eseguibile sk — il programma principale
  2. Plugin Vim/Nvim — per chiamare sk all'interno di Vim/Nvim. Controlla skim.vim per il supporto Vim.

Gestori di pacchetti

OSGestore di pacchettiComando
macOSHomebrewbrew install sk
macOSMacPortssudo port install skim
Alpineapkapk add skim
Archpacmanpacman -S skim
FedoraCOPRvedi sotto
GentooPortageemerge --ask app-misc/skim
Guixguixguix install skim
VoidXBPSxbps-install -S skim
Packaging status

Fedora

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

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

Come filtro

Ecco alcuni esempi per iniziare:```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:~
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 in sk senza usare la modalità interattiva.

demo modalità interattiva

Binding di Shell

I binding per Fish, Bash e Zsh sono disponibili nella directory shell:

  • completion.{shell} contiene gli script di completamento per l'uso CLI di sk
  • key-bindings.{shell} contiene i tasti di scelta rapida e le integrazioni con la shell:
    • ctrl-t per selezionare un file tramite sk
    • ctrl-r per selezionare una voce della cronologia tramite sk
    • alt-c per eseguire cd in una directory selezionata tramite sk
    • (non disponibile in fish) ** per completare i percorsi dei file, ad esempio ls **<tab> mostrerà un widget sk per selezionare una cartella

Per abilitare queste funzionalità, carica il file key-bindings.{shell} e configura i completamenti secondo la documentazione della tua shell o vedi sotto.

Completamenti di Shell

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:

Opzione 1: Caricare direttamente nella sessione di shell corrente```sh

For bash

source <(sk --shell bash)

For zsh

source <(sk --shell zsh)

For fish

sk --shell fish | source

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

Combinazioni di Tasti

Alcune combinazioni di tasti comunemente usate:

TastoAzione
InvioAccetta (seleziona quello corrente ed esci)
ESC/Ctrl-GInterrompi
Ctrl-P/Freccia suSposta il cursore in alto
Ctrl-N/Freccia giùSposta il cursore in basso
TABAttiva/disattiva la selezione e scendi (con -m)
Shift-TABAttiva/disattiva la selezione e sali (con -m)

Per un elenco completo delle combinazioni di tasti, consulta la pagina man (man sk).

Sintassi di Ricerca

skim riprende la sintassi di fzf per la corrispondenza degli elementi:

TokenTipo di corrispondenzaDescrizione
textcorrispondenza fuzzyelementi che corrispondono a text
^musiccorrispondenza esatta con prefissoelementi che iniziano con music
.mp3$corrispondenza esatta con suffissoelementi che terminano con .mp3
'wildcorrispondenza esatta (tra virgolette)elementi che includono wild
!firecorrispondenza esatta inversaelementi che non includono fire
!.mp3$corrispondenza esatta con suffisso inversoelementi 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:

    • Se il valore dell'opzione (predefinito :) è assente dalla query, esegui una corrispondenza normale
    • Se è presente, confronta tutto ciò che precede con tutto ciò che precede negli elementi, e tutto ciò che segue (incluse eventuali altre occorrenze del delimitatore) con la parte successiva negli elementi. Ciò è particolarmente utile quando si passa l'input da rg per confrontare sia il nome del file che il contenuto.

Se preferisci usare le espressioni regolari, skim offre una modalità regex:```sh sk --regex

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

nu_plugin_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

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

Criteri di Ordinamento

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.

Schema Colori

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]

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

Personalizzazione dei Colori

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

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

Varie

  • --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 dati

Argomenti avanzati

Modalità interattiva

In modalità interattiva, puoi richiamare un comando dinamicamente. Provala:```sh sk --ansi -i -c 'rg --color=always --line-number {q}'

root@kitploit:~
### Come funziona?

![Come funziona la modalità interattiva di Skim](https://assets.kitploit.com/production/public/readmes/54416/5895df8cd6dbe8dfe20cafd1bf0b23fd690191710c00f811e110aba228b32a35/a7b995846d08eb2aa7f351371b38a9a35261eb393632363f62c6a67785f4038e-display-v1.webp)

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

Algoritmi

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 fzf
  • frizbee, 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 refusi
  • arinae, 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 standard

Finestra di Anteprima

Questa è 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 {}"

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

![anteprima demo](https://assets.kitploit.com/production/public/readmes/54416/b89dd1e40297ffc3fa4684c4a6d5dc9506c0eafdb881d4cea079ff843f1a271a/84156872f39354a97241078491506fee9f9962eda6628161f94f6f36ec2c79f9-display-v1.webp)

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

Uso come libreria

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

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

Utilizzo granulare

Puoi anche ottenere un utilizzo granulare di skim come libreria usando tokio e codice asincrono, permettendoti di interagire dinamicamente con

Funzionamento interno

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>>
  • Se è none, invocherà il comando fornito e leggerà gli elementi dall'output del comando
  • Altrimenti, leggerà gli elementi dal canale (crossbeam).

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

Benchmark

Questo benchmark esegue l'interfaccia interattiva in una sessione tmux e attende che l'interfaccia utente si stabilizzi.

grafici dei benchmark

Puoi generare i grafici usando just bench-plot o eseguendo la ricetta manualmente in GNU bash.

FAQ

Come ignorare i file?

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

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

Differenze rispetto a fzf

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:

  1. skim ha una modalità interattiva.
  2. skim supporta la pre-selezione.
  3. L'algoritmo di ricerca fuzzy è diverso.

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.

Come contribuire

Crea nuove issue se incontri bug o hai idee. Le pull request sono benvenute.

Test di compatibilità con Windows

È 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

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

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

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

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

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

Benchmark di criterio

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.

Scarica lo strumento