Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
gha-lab-456dd8a245 — Sicherheitsforschungs-Labor, das CVE-2026-41414 reproduziert (pull_request_target-Pwn in .github/workflows/pr.yml) — Snapshot von skim-rs/skim @ ca986f4, kein Fork. | Kitploit
Tools/GitHubGitHub/pvharmo2/gha-lab-456dd8a245
SchwachstellenanalyseExploitationLieferkettensicherheitLernen & BildungKuratierte Ressourcen
GitHubpvharmo2/gha-lab-456dd8a245

gha-lab-456dd8a245

Sicherheitsforschungs-Labor, das CVE-2026-41414 reproduziert (pull_request_target-Pwn in .github/workflows/pr.yml) — Snapshot von skim-rs/skim @ ca986f4, kein Fork.

Repository anzeigen
1vor 6h 33mNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Automatisiertes Forschungsobjekt — nicht das Upstream-Projekt.

Dieses Repository ist ein Wegwerf-Labor, das von einer automatisierten Testumgebung für eine Masterarbeit an der Université Laval zur Reproduktion veröffentlichter GitHub-Actions-Workflow- Schwachstellen erstellt wurde. Es ist eine wörtliche Momentaufnahme von skim-rs/skim beim Commit ca986f444c37d2c1dc15ce1fad2fe101776af8d9 (2026-04-14), weiterverbreitet unter der eigenen Lizenz dieses Projekts, deren Datei unverändert in dieser Momentaufnahme enthalten ist.

Das Upstream-Projekt ist nicht beteiligt, wird niemals angegriffen, und die hier untersuchte Schwachstelle ist bereits öffentlich. Jedes Geheimnis und jede Variable in diesem Repository ist ein zufällig generierter Dummy-Wert — es sind keine echten Anmeldedaten vorhanden. Aktionsreferenzen und Runner-Images sind auf das fixiert, was sie am 2026-04-14 aufgelöst haben; siehe pinning.md in der Testumgebungsausgabe für jede an der Momentaufnahme vorgenommene Änderung.

Fragen oder Einwände: [email protected]


Crates.io Build & Test

codecov badge
Packaging status
Skim Discord
Skim Matrix room
Built with Ratatui

Das Leben ist kurz, skim!

Wir verbringen so viel Zeit damit, durch Dateien, Zeilen und Befehle zu navigieren. Genau hier kommt Skim ins Spiel! Es ist ein leistungsstarker Fuzzy-Finder, der deinen Workflow schneller und effizienter machen soll.

skim demo

Skim stellt eine einzelne ausführbare Datei namens sk bereit. Stell es dir als intelligentere Alternative zu Werkzeugen wie grep vor – sobald du es ausprobierst, wirst du dich fragen, wie du je ohne es leben konntest!

Inhaltsverzeichnis

  • Installation
    • Paketmanager
    • Manuell
  • Verwendung
    • Als Vim-Plugin
    • Als Filter
    • Als interaktive Oberfläche
    • Shell-Bindungen
    • Tastenkombinationen
    • Suchsyntax
    • Exit-Code
  • Mit skim kompatible Werkzeuge
    • fzf-lua neovim plugin
    • nu_plugin_skim
  • Anpassung
    • Tastenbelegung
    • Sortierkriterien
    • Farbschema
    • Sonstiges
  • Fortgeschrittene Themen
    • Interaktiver Modus
      • Wie funktioniert es?
    • Ausführen externer Programme
    • Algorithmen
    • Vorschaufenster
      • Wie funktioniert es?
    • Feldunterstützung
    • Als Bibliothek verwenden
    • Benchmarks
  • FAQ
    • Wie ignoriere ich Dateien?
    • Einige Dateien werden im Vim-Plugin nicht angezeigt
  • Unterschiede zu fzf
  • Wie man beiträgt
    • Windows-Kompatibilitätstests
  • Fehlerbehebung
    • Probleme mit Zeilenumbrüchen bei nix, FreeBSD, termux

Installation

Das Skim-Projekt enthält mehrere Komponenten:

  1. sk-Programm – das Kernprogramm
  2. Vim/Nvim-Plugin – um sk innerhalb von Vim/Nvim aufzurufen. Siehe skim.vim für die Vim-Unterstützung.

Paketmanager

OSPaketmanagerBefehl
macOSHomebrewbrew install sk
macOSMacPortssudo port install skim
Alpineapkapk add skim
Archpacmanpacman -S skim
FedoraCOPRsiehe unten
GentooPortageemerge --ask app-misc/skim
Guixguixguix install skim
VoidXBPSxbps-install -S skim
Packaging status

Fedora

Aktuelle Fedora-Pakete werden über ein inoffizielles, von der Community gepflegtes COPR-Repository bereitgestellt.```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim

root@kitploit:~
## Manuell

Einer der folgenden Punkte trifft zu:

- Verwendung des Installationsskripts:
    ```sh
    # Überprüfen Sie immer den Inhalt des Skripts, bevor Sie es ausführen!
    $ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
    ```
- Verwendung der Binärdatei: Laden Sie einfach [die sk-ausführbare Datei](https://github.com/skim-rs/skim/releases) direkt herunter.
- Installation von [crates.io](https://crates.io/): `cargo install skim`
- Manuelle Erstellung:
    ```sh
    $ git clone --depth 1 [email protected]:skim-rs/skim.git ~/.skim
    $ cd ~/.skim
    $ cargo build --release
    $ # Fügen Sie die resultierende `target/release/sk`-ausführbare Datei zu Ihrem PATH hinzu
    ```

Sie haben dann Zugriff auf:

- Die Manpage, die Sie entweder in den richtigen Pfad schreiben oder mit `man --local-file <(sk --man)` ausführen können
- Die Shell-Vervollständigungen (und optionale Tastenkombinationen) mit `source <(sk --shell \<shell> \[--shell-bindings])`, siehe unten für Details

# Verwendung

Skim kann entweder als allgemeiner Filter (ähnlich wie `grep`) oder als interaktive
Schnittstelle zum Ausführen von Befehlen verwendet werden.

## Als Vim-Plugin (unter neovim, siehe [fzf-lua](https://github.com/ibhagwan/fzf-lua) mit dem skim-Profil)

Über vim-plug (empfohlen):

Installieren Sie skim, dann:```vim
Plug 'skim-rs/skim'

Als Filter

Hier sind einige Beispiele für den Einstieg:```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:~
Dieser letzte Befehl ermöglicht es dir, Dateien mit der Erweiterung „.rs“ auszuwählen und öffnet
deine Auswahl in Vim – ein großer Zeitersparnis für Entwickler!

## Als interaktive Oberfläche

`skim` kann andere Befehle dynamisch aufrufen. Normalerweise möchtest du es
mit [grep](https://www.gnu.org/software/grep/),
[ack](https://github.com/petdance/ack2),
[ag](https://github.com/ggreer/the_silver_searcher) oder
[rg](https://github.com/BurntSushi/ripgrep) integrieren, um Inhalte in einem
Projektverzeichnis zu durchsuchen:```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}'

Hinweis: In diesen Beispielen wird {q} wörtlich durch die aktuelle Eingabeabfrage (in einfache Anführungszeichen gesetzt) ersetzt. Das bedeutet, dass diese Beispiele nach der exakten Abfragezeichenfolge suchen, nicht unscharf. Für unscharfe Suche leiten Sie die Befehlsausgabe in sk um, ohne den interaktiven Modus zu verwenden.

Demo des interaktiven Modus

Shell-Bindungen

Bindungen für Fish, Bash und Zsh sind im Verzeichnis shell verfügbar:

  • completion.{shell} enthält die Vervollständigungsskripte für die sk-CLI-Nutzung
  • key-bindings.{shell} enthält Tastenkombinationen und Shell-Integrationen:
    • ctrl-t zum Auswählen einer Datei über sk
    • ctrl-r zum Auswählen eines Verlaufseintrags über sk
    • alt-c zum Wechseln (cd) in ein über sk ausgewähltes Verzeichnis
    • (nicht in fish verfügbar) ** zum Vervollständigen von Dateipfaden, z. B. zeigt ls **<tab> ein sk-Widget zum Auswählen eines Ordners

Um diese Funktionen zu aktivieren, laden Sie die Datei key-bindings.{shell} und richten Sie die Vervollständigungen gemäß der Dokumentation Ihrer Shell ein oder siehe unten.

Shell-Vervollständigungen

Sie können Shell-Vervollständigungen für Ihre bevorzugte Shell mit dem Flag --shell und einer der unterstützten Shells generieren: bash, zsh, fish, powershell oder elvish:

Option 1: Direkt in Ihrer aktuellen Shell-Sitzung laden```sh

For bash

source <(sk --shell bash)

For zsh

source <(sk --shell zsh)

For fish

sk --shell fish | source

root@kitploit:~
#### Option 2: In einer Datei speichern, die beim Shell-Start automatisch geladen wird```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

Tastenkombinationen

Einige häufig verwendete Tastenkombinationen:

TasteAktion
EnterÜbernehmen (aktuelles auswählen und beenden)
ESC/Ctrl-GAbbrechen
Ctrl-P/Nach obenCursor nach oben bewegen
Ctrl-N/Nach untenCursor nach unten bewegen
TABAuswahl umschalten und nach unten (mit -m)
Shift-TABAuswahl umschalten und nach oben (mit -m)

Eine vollständige Liste der Tastenkombinationen finden Sie in der Manpage (man sk).

Suchsyntax

skim übernimmt die Syntax von fzf zum Abgleichen von Einträgen:

TokenÜbereinstimmungstypBeschreibung
textFuzzy-ÜbereinstimmungEinträge, die mit text übereinstimmen
^musicPräfix-ExaktübereinstimmungEinträge, die mit music beginnen
.mp3$Suffix-ExaktübereinstimmungEinträge, die mit .mp3 enden
'wildExaktübereinstimmung (in Anführungszeichen)Einträge, die wild enthalten
!fireInverse-ExaktübereinstimmungEinträge, die fire nicht enthalten
!.mp3$Inverse-Suffix-ExaktübereinstimmungEinträge, die nicht mit .mp3 enden

skim unterstützt auch die Kombination von Token.

  • Leerzeichen haben die Bedeutung von UND. Mit dem Begriff src main sucht skim nach Einträgen, die sowohl src als auch main entsprechen.

  • | bedeutet ODER (beachten Sie die Leerzeichen um |). Mit dem Begriff .md$ | .markdown$ sucht skim nach Einträgen, die entweder mit .md oder .markdown enden.

  • ODER hat höhere Priorität. Beispielsweise wird readme .md$ | .markdown$ interpretiert als readme UND (.md$ ODER .markdown$).

  • Bei Verwendung der Option --split-match wird jeder Teil um Leerzeichen oder | herum aufgeteilt abgeglichen:

    • Wenn der Wert der Option (Standardwert :) in der Abfrage fehlt, erfolgt ein normaler Abgleich
    • Wenn er vorhanden ist, wird alles davor mit allem davor in den Einträgen abgeglichen, und alles danach (einschließlich weiterer Vorkommen des Trennzeichens) mit dem Teil danach in den Einträgen. Dies ist besonders nützlich, wenn Eingaben von rg weitergeleitet werden, um sowohl auf Dateinamen als auch auf Inhalt abzugleichen.

Wenn Sie reguläre Ausdrücke bevorzugen, bietet skim einen regex-Modus:```sh sk --regex

root@kitploit:~
Sie können dynamisch in den `regex`-Modus wechseln, indem Sie `Strg-R` (Modus rotieren) drücken.

## Exit-Code

| Exit-Code | Bedeutung                            |
|-----------|--------------------------------------|
| 0         | Normal beendet                       |
| 1         | Keine Übereinstimmung gefunden       |
| 130       | Durch Strg-C/Strg-G/ESC usw. abgebrochen |

# Mit `skim` kompatible Tools

Diese Tools sind mit `skim` kompatibel oder zielen darauf ab, es zu sein:

## [fzf-lua neovim-Plugin](https://github.com/ibhagwan/fzf-lua)

Ein [neovim](https://neovim.io)-Plugin, das die Verwendung von fzf und skim zur Navigation durch Ihren Code ermöglicht.

Installieren Sie es mit Ihrem Paketmanager, wie in der README beschrieben. Zum Beispiel mit `lazy.nvim`:```lua
{
  "ibhagwan/fzf-lua",
  -- enable `sk` support instead of the default `fzf`
  opts = {'skim'}
}

nu_plugin_skim

Ein nushell-Plugin, das eine bessere Interaktion zwischen skim und nushell ermöglicht.

Befolgen Sie die Anweisungen in der README des Plugins, um es mit cargo zu installieren:```nu cargo install nu_plugin_skim plugin add ~/.cargo/bin/nu_plugin_skim

root@kitploit:~
## [sqlite-Erweiterung](https://github.com/tzachar/sqlite_skim)

Ein ladbares `sqlite`-Modul, das eine `skim_score`-Funktion in SQL-Abfragen
ermöglicht.

# Anpassung

Die Dokumentation hier ist nur eine Vorschau; bitte lesen Sie die Manpage (`man sk`) für eine vollständige
Liste der Optionen.

## Tastenbelegung

Geben Sie die Bindungen als kommagetrennte Paare an (keine Leerzeichen erlaubt). Zum Beispiel:```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'

Zusätzlich kannst du + verwenden, um Aktionen zu verketten, z. B. execute-silent(echo {} | pbcopy)+abort.

Details findest du im Abschnitt KEY BINDINGS der Manpage.

Sortierkriterien

Es gibt fünf Sortierschlüssel für Ergebnisse: score, index, begin, end, length. Du kannst festlegen, wie die Datensätze sortiert werden, z. B. mit sk --tiebreak score,index,-begin oder in einer beliebigen anderen Reihenfolge, die du möchtest.

Farbschema

Du hast wahrscheinlich deine eigenen ästhetischen Vorlieben! Zum Glück bist du nicht auf das Standard-Erscheinungsbild beschränkt – Skim unterstützt eine umfassende Anpassung seines Farbschemas.```sh --color=[BASE_SCHEME][,COLOR:ANSI]

root@kitploit:~
Skim respektiert auch die Umgebungsvariable `NO_COLOR`. Setzen Sie sie auf einen beliebigen Wert und `sk` (sowie viele andere Terminal-Anwendungen) deaktivieren die gesamte farbige Ausgabe. Weitere Details finden Sie unter [no-color.org](https://no-color.org/).

### Verfügbare Basis-Farbschemata

Skim wird mit mehreren integrierten Farbschemata ausgeliefert, die Sie als Ausgangspunkt verwenden können:```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)

Anpassen der Farben

Sie können einzelne UI-Elemente anpassen, indem Sie nach dem Basisschema Farbwerte angeben:```sh sk --color=light,fg:232,bg:255,current_bg:116,info:27

root@kitploit:~
Farben können auf verschiedene Weise angegeben werden:

- ANSI-Farben (0-255): `sk --color=fg:232,bg:255`
- RGB-Hexwerte: `sk --color=fg:#FF0000` (roter Text)

### Verfügbare Optionen zur Farbanpassung

Die folgenden UI-Elemente können angepasst werden:

| Element            | Beschreibung                                 | Beispiel                        |
|--------------------|---------------------------------------------|--------------------------------|
| `fg`               | Vordergrundfarbe für normalen Text          | `--color=fg:232`               |
| `bg`               | Hintergrundfarbe für normalen Text          | `--color=bg:255`               |
| `matched`          | Übereinstimmender Text in Suchergebnissen   | `--color=matched:108`          |
| `matched_bg`       | Hintergrund des übereinstimmenden Texts     | `--color=matched_bg:0`         |
| `current`          | Vordergrundfarbe der aktuellen Zeile        | `--color=current:254`          |
| `current_bg`       | Hintergrundfarbe der aktuellen Zeile        | `--color=current_bg:236`       |
| `current_match`    | Übereinstimmender Text in der aktuellen Zeile | `--color=current_match:151`    |
| `current_match_bg` | Hintergrund des übereinstimmenden Texts in der aktuellen Zeile | `--color=current_match_bg:236` |
| `spinner`          | Farbe des Fortschrittsanzeigers             | `--color=spinner:148`          |
| `info`             | Farbe der Informationszeile                 | `--color=info:144`             |
| `prompt`           | Farbe der Eingabeaufforderung               | `--color=prompt:110`           |
| `cursor`           | Cursorfarbe                                 | `--color=cursor:161`           |
| `selected`         | Farbe der Markierung ausgewählter Elemente  | `--color=selected:168`         |
| `header`           | Farbe des Kopfzeilentexts                   | `--color=header:109`           |
| `border`           | Rahmenfarbe für Vorschau/Layout             | `--color=border:59`            |

### Beispiele```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

Weitere Details findest du in der Manpage (man sk).

Sonstiges

  • --ansi: zum Parsen von ANSI-Farbcodes (z. B. \e[32mABC) der Datenquelle
  • --regex: die Abfrage als regulären Ausdruck verwenden, um die Datenquelle abzugleichen

Fortgeschrittene Themen

Interaktiver Modus

Im interaktiven Modus kannst du einen Befehl dynamisch aufrufen. Probier es aus:```sh sk --ansi -i -c 'rg --color=always --line-number {q}'

root@kitploit:~
### Wie funktioniert es?

![Wie Skims interaktiver Modus funktioniert](https://assets.kitploit.com/production/public/readmes/54416/5895df8cd6dbe8dfe20cafd1bf0b23fd690191710c00f811e110aba228b32a35/a7b995846d08eb2aa7f351371b38a9a35261eb393632363f62c6a67785f4038e-display-v1.webp)

- Skim akzeptiert zwei Arten von Quellen: Befehlsausgabe oder gepipte Eingabe
- Skim hat zwei Arten von Eingabeaufforderungen: Eine Abfrageaufforderung zur Angabe des Abfragemusters und eine
    Befehlsaufforderung zur Angabe der „Argumente“ des Befehls
- `-c` wird verwendet, um den auszuführenden Befehl anzugeben und standardmäßig auf `SKIM_DEFAULT_COMMAND` gesetzt
- `-i` weist Skim an, die Befehlsaufforderung beim Start zu öffnen, die standardmäßig `c>` anzeigt.

Um die vom Befehl zurückgegebenen Ergebnisse weiter einzugrenzen, drücken Sie
`Ctrl-Q`, um den interaktiven Modus umzuschalten.

## Ausführen externer Programme

Sie können Tastenkombinationen konfigurieren, um externe Prozesse zu starten, ohne Skim zu verlassen (`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'

Algorithmen

Skim bietet mehrere Algorithmen an; eine vollständige Liste findest du in der Hilfe oder der Manpage. Darunter sind:

  • skim_v2, der Standardalgorithmus, lose basierend auf dem Algorithmus von fzf
  • frizbee, verwendet frizbee, den tippfehlerresistenten Algorithmus aus dem blink.cmp Neovim-Plugin (nur x86_64 und aarch64)
  • fzy, basierend auf dem Algorithmus von fzy, erweitert um grundlegende Tippfehlerresistenz
  • arinae, der neueste Algorithmus von skim, intern entwickelt mit Fokus auf Tippfehlerresistenz, der alle oben genannten erweitert, um tippfehlerresistentes Matching natürlicher wirken zu lassen, während die Leistung pro Eintrag auf höchstem Niveau bleibt

Vorschaufenster

Dies ist eine großartige Funktion von fzf, die sich skim zunutze macht. Beispielsweise verwenden wir 'ag', um die übereinstimmenden Zeilen zu finden, und sobald wir die Zielzeilen eingegrenzt haben, möchten wir letztendlich entscheiden, welche Zeilen wir auswählen, indem wir den Kontext um die Zeile prüfen. grep und ag haben die Option --context, und skim kann --context für ein besseres Vorschaufenster nutzen. Zum Beispiel:```sh sk --ansi -i -c 'ag --color {q}' --preview "preview.sh {}"

root@kitploit:~
(Beachten Sie, dass [preview.sh](https://github.com/junegunn/fzf.vim/blob/master/bin/preview.sh) ein Skript ist, das den Kontext anhand von Dateiname:Zeilen:Spalten ausgibt)

Sie erhalten dann Folgendes:

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

### Wie funktioniert das?

Wenn der Vorschau-Befehl über die Option `--preview` angegeben wird, ersetzt skim das
`{}` durch die aktuell hervorgehobene Zeile, die in einfache Anführungszeichen gesetzt wird, ruft den
Befehl auf, um die Ausgabe zu erhalten, und zeigt die Ausgabe im Vorschaufenster an.

Manchmal benötigen Sie nicht die gesamte Zeile, um den Befehl auszuführen. In diesem Fall
können Sie `{}`, `{1..}`, `{..3}` oder `{1..5}` verwenden, um die Felder auszuwählen. Die
Syntax wird im Abschnitt [Feldunterstützung](#filds-support) erläutert.

Schließlich möchten Sie möglicherweise die Position des Vorschaufensters mit `--preview-window` konfigurieren:
- `--preview-window up:30%`, um das Fenster oben mit einer Höhe von
    30 % der Gesamthöhe von skim zu platzieren.
- `--preview-window left:10:wrap`, um anzugeben, dass `wrap` es dem Vorschaufenster
    ermöglicht, die Ausgabe des Vorschau-Befehls umzubrechen.
- `--preview-window wrap:hidden`, um das Vorschaufenster beim Start auszublenden; später
    kann es durch die Aktion `toggle-preview` angezeigt werden.

## Feldunterstützung

Normalerweise müssen nur Plugin-Benutzer dies verstehen.

Sie haben beispielsweise die Datenquelle mit dem Format:```sh
<filename>:<line number>:<column number>

Allerdings möchtest du <filename> nur durchsuchen, wenn du Suchbegriffe eingibst. Das bedeutet, wenn du 21 eingibst, möchtest du ein <filename> finden, das 21 enthält, aber nicht die Zeilennummer oder Spaltennummer abgleichen.

Du kannst sk --delimiter ':' --nth 1 verwenden, um dies zu erreichen.

Du kannst auch --with-nth verwenden, um die Reihenfolge der Felder neu anzuordnen.

Bereichssyntax

  • <num> -- um das num-te Feld anzugeben, beginnend mit 1.
  • start.. -- beginnend mit dem start-ten Feld und dem Rest.
  • ..end -- beginnend mit dem 0-ten Feld, bis zum end-ten Feld, einschließlich end.
  • start..end -- beginnend mit dem start-ten Feld, bis zum end-ten Feld, einschließlich end.

Als Bibliothek verwenden

Skim kann als Bibliothek in deinen Rust-Crates verwendet werden.

Füge zuerst skim zu deiner Cargo.toml hinzu:```toml [dependencies] skim = { version = "", default-features = false, features = [..] }

root@kitploit:~
_Hinweis zu Features_:
    - das `cli`-Feature ist erforderlich, um skim als CLI zu verwenden; es *sollte* nicht benötigt werden, wenn es als Bibliothek verwendet wird.

### Grundlegende Verwendung

Versuchen Sie dann, dieses einfache Beispiel auszuführen:```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());
    }
}

Feingranulare Nutzung

Sie können skim auch feingranular als Bibliothek mit tokio und asynchronem Code nutzen, um dynamisch mit

Interne Funktionsweise

Bei einem Option<SkimItemReceiver> liest skim die Einträge entsprechend, erledigt seine Aufgabe und liefert uns die Benutzerauswahl zurück, einschließlich der ausgewählten Einträge, der Abfrage usw. Beachten Sie, dass:

  • SkimItemReceiver ist crossbeam::channel::Receiver<Arc<dyn SkimItem>>
  • Wenn es none ist, wird der angegebene Befehl aufgerufen und die Einträge aus der Befehlsausgabe gelesen
  • Andernfalls werden die Einträge aus dem (crossbeam-)Kanal gelesen.

Das Trait SkimItem wird bereitgestellt, um anzupassen, wie eine Zeile angezeigt, verglichen und in der Vorschau dargestellt werden kann. Es ist standardmäßig für AsRef<str> implementiert.

Außerdem ist SkimItemReader ein Helfer, um ein BufRead in SkimItemReceiver umzuwandeln (wir können eine File oder String leicht in BufRead umwandeln), sodass Sie problemlos mit Zeichenketten oder Dateien arbeiten können.

Weitere Beispiele finden Sie im Verzeichnis examples/.

Benchmarks

Dieser Benchmark führt die interaktive Oberfläche in einer tmux-Sitzung aus und wartet darauf, dass sich die Benutzeroberfläche stabilisiert.

Benchmark-Diagramme

Sie können die Diagramme mit just bench-plot erzeugen oder das Rezept manuell in GNU bash ausführen.

FAQ

Wie ignoriere ich Dateien?

Skim ruft find . auf, um eine Liste von Dateien zum Filtern abzurufen. Sie können dies überschreiben, indem Sie die Umgebungsvariable SKIM_DEFAULT_COMMAND setzen. Zum Beispiel:```sh $ SKIM_DEFAULT_COMMAND="fd --type f || git ls-tree -r --name-only HEAD || rg --files || find ." $ sk

root@kitploit:~
Du kannst es in deine `.bashrc` oder `.zshrc` einfügen, wenn du möchtest, dass es standardmäßig verwendet wird.

## Einige Dateien werden im Vim-Plugin nicht angezeigt

Wenn du das Vim-Plugin verwendest und den Befehl `:SK` ausführst, kann es sein, dass einige
deiner Dateien nicht angezeigt werden.

Wie in [#3](https://github.com/skim-rs/skim/issues/3) beschrieben, wird im Vim-
Plugin `SKIM_DEFAULT_COMMAND` standardmäßig auf den Befehl gesetzt:```vim
let $SKIM_DEFAULT_COMMAND = "git ls-tree -r --name-only HEAD || rg --files || ag -l -g \"\" || find ."

Dies bedeutet, dass Dateien, die von git nicht erkannt werden, nicht angezeigt werden. Du kannst entweder den Standardwert mit let $SKIM_DEFAULT_COMMAND = '' überschreiben oder die fehlenden Dateien selbst finden.

Unterschiede zu fzf

fzf ist ein Fuzzy-Finder für die Kommandozeile, geschrieben in Go, und skim versucht, einen neuen in Rust zu implementieren!

Dieses Projekt wurde von Grund auf neu geschrieben. Einige Implementierungsentscheidungen unterscheiden sich von fzf. Zum Beispiel:

  1. skim hat einen interaktiven Modus.
  2. skim unterstützt Vorauswahl.
  3. Der Fuzzy-Suchalgorithmus ist anders.

Allgemeiner gesagt erlauben sich die Maintainer von skim etwas Freiheit bei der Umsetzung. Das Ziel ist es, skim genauso funktionsreich zu halten wie fzf, aber die Befehlsflags können sich unterscheiden.

So kannst du beitragen

Erstelle neue Issues, wenn du auf Fehler stößt oder Ideen hast. Pull Requests sind herzlich willkommen.

Tests zur Windows-Kompatibilität

Eine Vagrantfile ist enthalten, um eine headless Windows Server 2022 Core VM für Tests der Windows-Kompatibilität ohne GUI zu starten. Es erfordert VirtualBox und Vagrant auf deinem Host (vagrant ist in der Nix-Dev- Shell über flake.nix enthalten).```sh vagrant up # First boot: downloads the box and provisions (~15–20 min) ssh -p 2222 vagrant@localhost # Password: vagrant

root@kitploit:~
Innerhalb der VM ist das Projektverzeichnis unter `C:\vagrant` eingebunden:```powershell
cd C:\vagrant
cargo build
cargo test

Nachfolgende Starts sind schnell — die Bereitstellung läuft nur einmal:```sh vagrant halt # Stop the VM vagrant up # Resume vagrant destroy # Delete the VM entirely

root@kitploit:~
# Fehlerbehebung

Um zu diagnostizieren, was passiert, können Sie die Umgebungsvariable `SKIM_LOG` oder das Flag `--log-level` auf `debug` oder sogar `trace` setzen und die Umgebungsvariable `SKIM_LOG_FILE` oder das Flag `--log-file` auf einen Pfad setzen. Sie können diese Protokolle dann während oder nach der Ausführung lesen, um besser zu verstehen, was passiert. Zögern Sie nicht, diese Protokolle zu einem Issue hinzuzufügen, wenn Sie Hilfe benötigen.

## Probleme mit Zeilenumbrüchen bei nix, FreeBSD, termux

Wenn Sie Anzeigeprobleme wie diese feststellen:```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

Zum Beispiel

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

Du musst TERMINFO oder TERMINFO_DIRS auf den Pfad einer korrekten Terminfo-Datenbank setzen

Zum Beispiel kannst du mit Termux Folgendes in deiner bashrc hinzufügen:``` export TERMINFO=/data/data/com.termux/files/usr/share/terminfo

root@kitploit:~
# Benchmarks

## Interaktiver Benchmark (`cli`)

Der `cli`-Benchmark testet skim (oder eine beliebige kompatible Binärdatei) gegen andere Versionen oder fzf, indem er die interaktive Oberfläche in einer tmux-Sitzung ausführt und die Statuszeile abfragt, bis die Anzahl der Treffer stabil bleibt. Dies ist keineswegs eine präzise oder narrensichere Messung, hat aber den zusätzlichen Vorteil, dass er gegen `fzf` benchmarkt und Ressourcenmetriken (Spitzen-RSS und CPU) liefert.```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

Binärnamen werden vor der Verwendung über which zu absoluten Pfaden aufgelöst, sodass einfache Namen wie sk oder fzf funktionieren, solange sie sich auf $PATH befinden.

Criterion-Benchmarks

Criterion-Benchmarks sind verfügbar, um die Leistung von skim genauer zu messen. Um sie auszuführen, müssen Sie zunächst Eingabedaten mit cargo bench --bench cli -- -g benches/fixtures/10M.txt -n 10000000 && cargo bench --bench cli -- -g benches/fixtures/1M.txt -n 1000000 generieren und dann cargo bench -j 1 ausführen.

Diese laufen mehrere Minuten lang.

Tool herunterladen