[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5599":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":16,"starSnapshotCount":16,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},5599,"skim","skim-rs\u002Fskim","skim-rs","Fuzzy Finder in rust!","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fskim",null,"Rust",6847,251,26,11,0,1,14,44,9,38.2,"MIT License",false,"master",true,[27,28,5],"fuzzyfinder","rust","2026-06-12 02:01:12","\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fcrates.io\u002Fcrates\u002Fskim\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fskim.svg\" alt=\"Crates.io\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Factions?query=workflow%3A%22Build+%26+Test%22+event%3Apush\">\n    \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Factions\u002Fworkflows\u002Ftest.yml\u002Fbadge.svg?event=push\" alt=\"Build & Test\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Fskim-rs\u002Fskim\" >\n    \u003Cimg src=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Fskim-rs\u002Fskim\u002Fgraph\u002Fbadge.svg?token=RtIDgmDdzX\" alt=\"codecov badge\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Frepology.org\u002Fproject\u002Fskim-fuzzy-finder\u002Fversions\">\n    \u003Cimg src=\"https:\u002F\u002Frepology.org\u002Fbadge\u002Ftiny-repos\u002Fskim-fuzzy-finder.svg\" alt=\"Packaging status\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002F23PuxttufP\">\n    \u003Cimg alt=\"Skim Discord\" src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1031830957432504361?label=&color=7389d8&labelColor=6a7ec2&logoColor=ffffff&logo=discord\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fmatrix.to\u002F#\u002F#skim:matrix.org\">\n    \u003Cimg alt=\"Skim Matrix room\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fmatrix-%23000000?style=flat&logo=matrix&logoColor=white\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fratatui.rs\">\n    \u003Cimg alt=\"Built with Ratatui\" src=\"https:\u002F\u002Fratatui.rs\u002Fbuilt-with-ratatui\u002Fbadge.svg\" \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n> Life is short, skim!\n\nWe spend so much of our time navigating through files, lines, and commands. That's where Skim comes in!\nIt's a powerful fuzzy finder designed to make your workflow faster and more efficient.\n\n[![skim demo](https:\u002F\u002Fasciinema.org\u002Fa\u002FpIfwazaM0mTHA8F7qRbjrqOnm.svg)](https:\u002F\u002Fasciinema.org\u002Fa\u002FpIfwazaM0mTHA8F7qRbjrqOnm)\n\nSkim provides a single executable called `sk`. Think of it as a smarter alternative to tools like\n`grep` - once you try it, you'll wonder how you ever lived without it!\n\n# Table of contents\n\n- [Installation](#installation)\n   * [Package Managers](#package-managers)\n   * [Manually](#manually)\n- [Usage](#usage)\n   * [As Vim plugin](#as-vim-plugin)\n   * [As filter](#as-filter)\n   * [As Interactive Interface](#as-interactive-interface)\n   * [Shell Bindings](#shell-bindings)\n   * [Key Bindings](#key-bindings)\n   * [Search Syntax](#search-syntax)\n   * [exit code](#exit-code)\n- [Tools compatible with `skim`](#tools-compatible-with-skim)\n   * [fzf-lua neovim plugin](#fzf-lua-neovim-plugin)\n   * [nu_plugin_skim](#nu_plugin_skim)\n- [Customization](#customization)\n   * [Keymap](#keymap)\n   * [Sort Criteria](#sort-criteria)\n   * [Color Scheme](#color-scheme)\n   * [Misc](#misc)\n- [Advanced Topics](#advanced-topics)\n   * [Interactive mode](#interactive-mode)\n      + [How does it work?](#how-does-it-work)\n   * [Executing external programs](#executing-external-programs)\n   * [Algorithms](#algorithms)\n   * [Preview Window](#preview-window)\n      + [How does it work?](#how-does-it-work-1)\n   * [Fields support](#fields-support)\n   * [Use as a library](#use-as-a-library)\n   * [Benchmarks](#benchmarks)\n- [FAQ](#faq)\n   * [How to ignore files?](#how-to-ignore-files)\n   * [Some files are not shown in Vim plugin](#some-files-are-not-shown-in-vim-plugin)\n- [Differences from fzf](#differences-from-fzf)\n- [How to contribute](#how-to-contribute)\n   * [Windows compatibility testing](#windows-compatibility-testing)\n- [Troubleshooting](#troubleshooting)\n   * [No line feed issues with nix, FreeBSD, termux](#no-line-feed-issues-with-nix-freebsd-termux)\n\n# Installation\n\nThe skim project contains several components:\n\n1. `sk` executable - the core program\n2. Vim\u002FNvim plugin - to call `sk` inside Vim\u002FNvim. Check [skim.vim](https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Fblob\u002Fmaster\u002Fplugin\u002Fskim.vim) for Vim support.\n\n## Package Managers\n\n| OS             | Package Manager   | Command                      |\n| -------------- | ----------------- | ---------------------------- |\n| macOS          | Homebrew          | `brew install sk`            |\n| macOS          | MacPorts          | `sudo port install skim`     |\n| Alpine         | apk               | `apk add skim`               |\n| Arch           | pacman            | `pacman -S skim`             |\n| Fedora         | COPR              |   see below                  |\n| Gentoo         | Portage           | `emerge --ask app-misc\u002Fskim` |\n| Guix           | guix              | `guix install skim`          |\n| Void           | XBPS              | `xbps-install -S skim`       |\n\n\u003Ca href=\"https:\u002F\u002Frepology.org\u002Fproject\u002Fskim-fuzzy-finder\u002Fversions\">\n    \u003Cimg src=\"https:\u002F\u002Frepology.org\u002Fbadge\u002Fvertical-allrepos\u002Fskim-fuzzy-finder.svg?columns=4\" alt=\"Packaging status\">\n\u003C\u002Fa>\n\n### Fedora\nUp to date Fedora packages are provided via an unofficial community-maintained COPR repository.\n```bash\nsudo dnf copr enable sisyphus1813\u002Fskim\nsudo dnf install skim\n```\n\n\n## Manually\n\nAny of the following applies:\n\n- Using the install script:\n    ```sh\n    # Always check the content of the script before running it !\n    $ curl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Freleases\u002Flatest\u002Fdownload\u002Fskim-installer.sh | sh\n    ```\n- Using Binary: Simply [download the sk executable](https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Freleases) directly.\n- Install from [crates.io](https:\u002F\u002Fcrates.io\u002F): `cargo install skim`\n- Build Manually:\n    ```sh\n    $ git clone --depth 1 git@github.com:skim-rs\u002Fskim.git ~\u002F.skim\n    $ cd ~\u002F.skim\n    $ cargo build --release\n    $ # Add the resulting `target\u002Frelease\u002Fsk` executable to your PATH\n    ```\n\nYou will then have access to:\n\n- The man page, which you can either write to the correct path or run `man --local-file \u003C(sk --man)`\n- The shell completions (and optional keybinds), using `source \u003C(sk --shell \\\u003Cshell> \\[--shell-bindings])`, see below for details\n\n# Usage\n\nSkim can be used either as a general filter (similar to `grep`) or as an interactive\ninterface for running commands.\n\n## As Vim plugin (on neovim, checkout [fzf-lua](https:\u002F\u002Fgithub.com\u002Fibhagwan\u002Ffzf-lua) with the skim profile)\n\nVia vim-plug (recommended):\n\nInstall skim, then :\n\n```vim\nPlug 'skim-rs\u002Fskim'\n```\n\n\n## As filter\n\nHere are some examples to get you started:\n\n```bash\n# directly invoke skim\nsk\n\n# Or pipe some input to it (press TAB key to select multiple items when -m is enabled)\nvim $(find . -name \"*.rs\" | sk -m)\n```\nThis last command lets you select files with the \".rs\" extension and opens\nyour selections in Vim - a great time-saver for developers!\n\n## As Interactive Interface\n\n`skim` can invoke other commands dynamically. Normally you would want to\nintegrate it with [grep](https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgrep\u002F),\n[ack](https:\u002F\u002Fgithub.com\u002Fpetdance\u002Fack2),\n[ag](https:\u002F\u002Fgithub.com\u002Fggreer\u002Fthe_silver_searcher), or\n[rg](https:\u002F\u002Fgithub.com\u002FBurntSushi\u002Fripgrep) for searching contents in a\nproject directory:\n\n```sh\n# works with grep\nsk --ansi -i -c 'grep -rI --color=always --line-number {q} .'\n# works with ack\nsk --ansi -i -c 'ack --color {q}'\n# works with ag\nsk --ansi -i -c 'ag --color {q}'\n# works with rg\nsk --ansi -i -c 'rg --color=always --line-number {q}'\n```\n\n> **Note**: In these examples, `{q}` will be literally expanded to the current input query (wrapped in single quotes).\n> This means these examples will search for the exact query string, not fuzzily.\n> For fuzzy searching, pipe the command output into `sk` without using interactive mode.\n\n![interactive mode demo](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F1527040\u002F21603930\u002F655d859a-d1db-11e6-9fec-c25099d30a12.gif)\n\n## Shell Bindings\n\nBindings for Fish, Bash and Zsh are available in the `shell` directory:\n- `completion.{shell}` contains the completion scripts for `sk` cli usage\n- `key-bindings.{shell}` contains key-binds and shell integrations:\n    - `ctrl-t` to select a file through `sk`\n    - `ctrl-r` to select an history entry through `sk`\n    - `alt-c`  to `cd` into a directory selected through `sk`\n    - (not available in `fish`) `**` to complete file paths, for example `ls **\u003Ctab>` will show a `sk` widget to select a folder\n\nTo enable these features, source the `key-bindings.{shell}` file and set up completions according to your shell's documentation or see below.\n\n### Shell Completions\n\nYou can generate shell completions for your preferred shell using the `--shell` flag with one of the supported shells: `bash`, `zsh`, `fish`, `powershell`, or `elvish`:\n\n#### Option 1: Source directly in your current shell session\n\n```sh\n# For bash\nsource \u003C(sk --shell bash)\n\n# For zsh\nsource \u003C(sk --shell zsh)\n\n# For fish\nsk --shell fish | source\n```\n\n#### Option 2: Save to a file to be loaded automatically on shell startup\n\n```sh\n# For bash, add to ~\u002F.bashrc\necho 'source \u003C(sk --shell bash)' >> ~\u002F.bashrc  # Or save to ~\u002F.bash_completion\n\n# For zsh, add to ~\u002F.zshrc\nsk --shell zsh > ~\u002F.zfunc\u002F_sk  # Create ~\u002F.zfunc directory and add to fpath in ~\u002F.zshrc\n\n# For fish, add to ~\u002F.config\u002Ffish\u002Fcompletions\u002F\nsk --shell fish > ~\u002F.config\u002Ffish\u002Fcompletions\u002Fsk.fish\n```\n\n## Key Bindings\n\nSome commonly used key bindings:\n\n| Key               | Action                                     |\n|------------------:|--------------------------------------------|\n| Enter             | Accept (select current one and quit)       |\n| ESC\u002FCtrl-G        | Abort                                      |\n| Ctrl-P\u002FUp         | Move cursor up                             |\n| Ctrl-N\u002FDown       | Move cursor Down                           |\n| TAB               | Toggle selection and move down (with `-m`) |\n| Shift-TAB         | Toggle selection and move up (with `-m`)   |\n\nFor a complete list of key bindings, refer to the [man\npage](https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Fblob\u002Fmaster\u002Fman\u002Fman1\u002Fsk.1) (`man sk`).\n\n## Search Syntax\n\n`skim` borrows `fzf`'s syntax for matching items:\n\n| Token    | Match type                 | Description                       |\n|----------|----------------------------|-----------------------------------|\n| `text`   | fuzzy-match                | items that match `text`           |\n| `^music` | prefix-exact-match         | items that start with `music`     |\n| `.mp3$`  | suffix-exact-match         | items that end with `.mp3`        |\n| `'wild`  | exact-match (quoted)       | items that include `wild`         |\n| `!fire`  | inverse-exact-match        | items that do not include `fire`  |\n| `!.mp3$` | inverse-suffix-exact-match | items that do not end with `.mp3` |\n\n`skim` also supports the combination of tokens.\n\n- Whitespace has the meaning of `AND`. With the term `src main`, `skim` will search\n    for items that match **both** `src` and `main`.\n- ` | ` means `OR` (note the spaces around `|`). With the term `.md$ |\n    .markdown$`, `skim` will search for items ends with either `.md` or\n    `.markdown`.\n- `OR` has higher precedence. For example, `readme .md$ | .markdown$` is interpreted as\n    `readme AND (.md$ OR .markdown$)`.\n\n- When using the `--split-match` option, each part around spaces or `|` will be matched in a split way:\n    - If the option's value (defaulting to `:`) is absent from the query, do a normal match\n    - If it is present, match everything before to everything before it in the items, and everything after it (including potential other occurrences of the delimiter) to the part after it in the items. This is particularly useful when piping in input from `rg` to match on both file name and content.\n\nIf you prefer using regular expressions, `skim` offers a `regex` mode:\n\n```sh\nsk --regex\n```\n\nYou can switch to `regex` mode dynamically by pressing `Ctrl-R` (Rotate Mode).\n\n## exit code\n\n| Exit Code | Meaning                             |\n|-----------|-------------------------------------|\n| 0         | Exited normally                     |\n| 1         | No Match found                      |\n| 130       | Aborted by Ctrl-C\u002FCtrl-G\u002FESC\u002Fetc... |\n\n# Tools compatible with `skim`\n\nThese tools are or aim to be compatible with `skim`:\n\n## [fzf-lua neovim plugin](https:\u002F\u002Fgithub.com\u002Fibhagwan\u002Ffzf-lua)\n\nA [neovim](https:\u002F\u002Fneovim.io) plugin allowing fzf and skim to be used in a to navigate your code.\n\nInstall it with your package manager, following the README. For instance, with `lazy.nvim`:\n\n```lua\n{\n  \"ibhagwan\u002Ffzf-lua\",\n  -- enable `sk` support instead of the default `fzf`\n  opts = {'skim'}\n}\n```\n\n## [nu_plugin_skim](https:\u002F\u002Fgithub.com\u002Fidanarye\u002Fnu_plugin_skim)\n\nA [nushell](https:\u002F\u002Fwww.nushell.sh\u002F) plugin to allow for better interaction between skim and nushell.\n\nFollowing the instruction in the plugin's README, you can install it with cargo:\n```nu\ncargo install nu_plugin_skim\nplugin add ~\u002F.cargo\u002Fbin\u002Fnu_plugin_skim\n```\n\n## [sqlite extension](https:\u002F\u002Fgithub.com\u002Ftzachar\u002Fsqlite_skim)\n\nAn `sqlite` loadable module which enables a `skim_score` function in SQL\nqueries.\n\n# Customization\n\nThe doc here is only a preview, please check the man page (`man sk`) for a full\nlist of options.\n\n## Keymap\n\nSpecify the bindings with comma separated pairs (no space allowed). For example:\n\n```sh\nsk --bind 'alt-a:select-all,alt-d:deselect-all'\n```\n\nAdditionally, use `+` to concatenate actions, such as `execute-silent(echo {} | pbcopy)+abort`.\n\nSee the _KEY BINDINGS_ section of the man page for details.\n\n## Sort Criteria\n\nThere are five sort keys for results: `score, index, begin, end, length`. You can\nspecify how the records are sorted by `sk --tiebreak score,index,-begin` or any\nother order you want.\n\n## Color Scheme\n\nYou probably have your own aesthetic preferences! Fortunately, you aren't\nlimited to the default appearance - Skim supports comprehensive customization of its color scheme.\n\n```sh\n--color=[BASE_SCHEME][,COLOR:ANSI]\n```\n\nSkim also respects the `NO_COLOR` environment variable. Set it to anything and `sk` (and many other terminal apps) will disable all colored output. See [no-color.org](https:\u002F\u002Fno-color.org\u002F) for more details.\n\n### Available Base Color Schemes\n\nSkim comes with several built-in color schemes that you can use as a starting point:\n\n```sh\nsk --color=dark      # Default dark theme (256 colors)\nsk --color=light     # Light theme (256 colors)\nsk --color=16        # Simple 16-color theme\nsk --color=bw        # Minimal black & white theme (no colors, just styles)\nsk --color=none      # Minimal black & white theme (no colors, no styles)\nsk --color=molokai   # Molokai-inspired theme (256 colors)\n```\n\n### Customizing Colors\n\nYou can customize individual UI elements by specifying color values after the base scheme:\n\n```sh\nsk --color=light,fg:232,bg:255,current_bg:116,info:27\n```\n\nColors can be specified in several ways:\n\n- ANSI colors (0-255): `sk --color=fg:232,bg:255`\n- RGB hex values: `sk --color=fg:#FF0000` (red text)\n\n### Available Color Customization Options\n\nThe following UI elements can be customized:\n\n| Element            | Description                                 | Example                        |\n|--------------------|---------------------------------------------|--------------------------------|\n| `fg`               | Normal text foreground color                | `--color=fg:232`               |\n| `bg`               | Normal text background color                | `--color=bg:255`               |\n| `matched`          | Matched text in search results              | `--color=matched:108`          |\n| `matched_bg`       | Background of matched text                  | `--color=matched_bg:0`         |\n| `current`          | Current line foreground color               | `--color=current:254`          |\n| `current_bg`       | Current line background color               | `--color=current_bg:236`       |\n| `current_match`    | Matched text in current line                | `--color=current_match:151`    |\n| `current_match_bg` | Background of matched text in current line  | `--color=current_match_bg:236` |\n| `spinner`          | Progress indicator color                    | `--color=spinner:148`          |\n| `info`             | Information line color                      | `--color=info:144`             |\n| `prompt`           | Prompt color                                | `--color=prompt:110`           |\n| `cursor`           | Cursor color                                | `--color=cursor:161`           |\n| `selected`         | Selected item marker color                  | `--color=selected:168`         |\n| `header`           | Header text color                           | `--color=header:109`           |\n| `border`           | Border color for preview\u002Flayout             | `--color=border:59`            |\n\n### Examples\n\n```sh\n# Use light theme but change the current line background\nsk --color=light,current_bg:24\n\n# Custom theme with multiple colors\nsk --color=dark,matched:#00FF00,current:#FFFFFF,current_bg:#000080\n\n# High contrast theme\nsk --color=fg:232,bg:255,matched:160,current:255,current_bg:20\n```\n\nFor more details, check the man page (`man sk`).\n\n## Misc\n\n- `--ansi`: to parse ANSI color codes (e.g., `\\e[32mABC`) of the data source\n- `--regex`: use the query as regular expression to match the data source\n\n# Advanced Topics\n\n## Interactive mode\n\nIn **interactive mode**, you can invoke a command dynamically. Try it out:\n\n```sh\nsk --ansi -i -c 'rg --color=always --line-number {q}'\n```\n\n### How does it work?\n\n![How Skim's interactive mode works](https:\u002F\u002Fuser-images.githubusercontent.com\u002F1527040\u002F53381293-461ce380-39ab-11e9-8e86-7c3bbfd557bc.png)\n\n- Skim  accepts two kinds of sources: Command output or piped input\n- Skim has two kinds of prompts: A query prompt to specify the query pattern and a\n    command prompt to specify the \"arguments\" of the command\n- `-c` is used to specify the command to execute and defaults to `SKIM_DEFAULT_COMMAND`\n- `-i` tells skim to open command prompt on startup, which will show `c>` by default.\n\nTo further narrow down the results returned by the command, press\n`Ctrl-Q` to toggle interactive mode.\n\n## Executing external programs\n\nYou can configure key bindings to start external processes without leaving Skim (`execute`, `execute-silent`).\n\n```sh\n# Press F1 to open the file with less without leaving skim\n# Press CTRL-Y to copy the line to clipboard and aborts skim (requires pbcopy)\nsk --bind 'f1:execute(less -f {}),ctrl-y:execute-silent(echo {} | pbcopy)+abort'\n```\n\n## Algorithms\n\nSkim offers multiple algorithms, check the help or manpage for an exhaustive list. Among them are:\n- `skim_v2`, the default algorithm, loosely based on `fzf`'s algorithm\n- `frizbee`, uses [frizbee](https:\u002F\u002Fcrates.io\u002Ffrizbee), the typo-resistant algorithm from in the [blink.cmp](https:\u002F\u002Fgithub.com\u002Fsaghen\u002Fblink.cmp) neovim plugin (**x86_64 and aarch64 only**)\n- `fzy`, based on [fzy](https:\u002F\u002Fgithub.com\u002Fjhawthorn\u002Ffzy\u002F)'s algorithm expanded for basic typo-resistance\n- `arinae`, skim's newest algorithm, designed in-house with typo-resistance in mind, expanding on all the above to make typo-resistant matching feel more natural while keeping the per-item performance up to the best standards\n\n## Preview Window\n\nThis is a great feature of fzf that skim borrows. For example, we use 'ag' to\nfind the matched lines, and once we narrow down to the target lines, we want to\nfinally decide which lines to pick by checking the context around the line.\n`grep` and `ag` have the option `--context`, and skim can make use of `--context` for\na better preview window. For example:\n\n```sh\nsk --ansi -i -c 'ag --color {q}' --preview \"preview.sh {}\"\n```\n\n(Note that [preview.sh](https:\u002F\u002Fgithub.com\u002Fjunegunn\u002Ffzf.vim\u002Fblob\u002Fmaster\u002Fbin\u002Fpreview.sh) is a script to print the context given filename:lines:columns)\n\nYou get things like this:\n\n![preview demo](https:\u002F\u002Fuser-images.githubusercontent.com\u002F1527040\u002F30677573-0cee622e-9ebf-11e7-8316-c741324ecb3a.png)\n\n### How does it work?\n\nIf the preview command is given by the `--preview` option, skim will replace the\n`{}` with the current highlighted line surrounded by single quotes, call the\ncommand to get the output, and print the output on the preview window.\n\nSometimes you don't need the whole line for invoking the command. In this case\nyou can use `{}`, `{1..}`, `{..3}` or `{1..5}` to select the fields. The\nsyntax is explained in the section [Fields Support](#filds-support).\n\nLastly, you might want to configure the position of preview window with `--preview-window`:\n- `--preview-window up:30%` to put the window in the up position with height\n    30% of the total height of skim.\n- `--preview-window left:10:wrap` to specify the `wrap` allows the preview\n    window to wrap the output of the preview command.\n- `--preview-window wrap:hidden` to hide the preview window at startup, later\n    it can be shown by the action `toggle-preview`.\n\n## Fields support\n\nNormally only plugin users need to understand this.\n\nFor example, you have the data source with the format:\n\n```sh\n\u003Cfilename>:\u003Cline number>:\u003Ccolumn number>\n```\n\nHowever, you want to search `\u003Cfilename>` only when typing in queries. That\nmeans when you type `21`, you want to find a `\u003Cfilename>` that contains `21`,\nbut not matching line number or column number.\n\nYou can use `sk --delimiter ':' --nth 1` to achieve this.\n\nYou can also use `--with-nth` to re-arrange the order of fields.\n\n**Range Syntax**\n\n- `\u003Cnum>` -- to specify the `num`-th fields, starting with 1.\n- `start..` -- starting from the `start`-th fields and the rest.\n- `..end` -- starting from the `0`-th field, all the way to `end`-th field,\n    including `end`.\n- `start..end` -- starting from `start`-th field, all the way to `end`-th\n    field, including `end`.\n\n## Use as a library\n\nSkim can be used as a library in your Rust crates.\n\nFirst, add skim into your `Cargo.toml`:\n\n```toml\n[dependencies]\nskim = { version = \"\u003Cversion>\", default-features = false, features = [..] }\n```\n\n_Note on features_:\n    - the `cli` feature is required to use skim as a cli, it *should* not be needed when using it as a library.\n\n### Basic usage\n\nThen try to run this simple example:\n\n```rust\nextern crate skim;\nuse skim::prelude::*;\nuse std::io::Cursor;\n\npub fn main() {\n    let options = SkimOptionsBuilder::default()\n        .height(\"50%\")\n        .multi(true)\n        .build()\n        .unwrap();\n\n    let input = \"aaaaa\\nbbbb\\nccc\".to_string();\n\n    \u002F\u002F `SkimItemReader` is a helper to turn any `BufRead` into a stream of `SkimItem`\n    \u002F\u002F `SkimItem` was implemented for `AsRef\u003Cstr>` by default\n    let item_reader = SkimItemReader::default();\n    let items = item_reader.of_bufread(Cursor::new(input));\n\n    \u002F\u002F `run_with` would read and show items from the stream\n    let selected_items = Skim::run_with(&options, Some(items))\n        .map(|out| out.selected_items)\n        .unwrap_or_else(|| Vec::new());\n\n    for item in selected_items.iter() {\n        println!(\"{}\", item.output());\n    }\n}\n```\n\n### Fine-grained usage\n\nYou can also gain fine-grained usage of skim as a library using `tokio` and async code, allowing you to dynamically interact with\n\n\n### Internal workings\n\nGiven an `Option\u003CSkimItemReceiver>`, skim will read items accordingly, do its\njob and bring us back the user selection including the selected items, the\nquery, etc. Note that:\n\n- `SkimItemReceiver` is `crossbeam::channel::Receiver\u003CArc\u003Cdyn SkimItem>>`\n- If it is none, it will invoke the given command and read items from command output\n- Otherwise, it will read the items from the (crossbeam) channel.\n\nTrait `SkimItem` is provided to customize how a line could be displayed,\ncompared and previewed. It is implemented by default for `AsRef\u003Cstr>`\n\nPlus, `SkimItemReader` is a helper to convert a `BufRead` into\n`SkimItemReceiver` (we can easily turn a `File` or `String` into `BufRead`),\nso that you could deal with strings or files easily.\n\nCheck out more examples under the [examples\u002F](https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Ftree\u002Fmaster\u002Fskim\u002Fexamples) directory.\n\n## Benchmarks\n\nThis benchmarks runs the interactive interface in a tmux session, and waits for the UI to stabilize.\n\n![benchmark graphs](.\u002Fbench.png)\n\nYou can generate the graphs by using `just bench-plot` or running the recipe manually in GNU bash.\n\n# FAQ\n\n## How to ignore files?\n\nSkim invokes `find .` to fetch a list of files for filtering. You can override\nthis by setting the environment variable `SKIM_DEFAULT_COMMAND`. For example:\n\n```sh\n$ SKIM_DEFAULT_COMMAND=\"fd --type f || git ls-tree -r --name-only HEAD || rg --files || find .\"\n$ sk\n```\n\nYou could put it in your `.bashrc` or `.zshrc` if you like it to be default.\n\n## Some files are not shown in Vim plugin\n\nIf you use the Vim plugin and execute the `:SK` command, you may find some\nof your files not shown.\n\nAs described in [#3](https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Fissues\u002F3), in the Vim\nplugin, `SKIM_DEFAULT_COMMAND` is set to the command by default:\n\n```vim\nlet $SKIM_DEFAULT_COMMAND = \"git ls-tree -r --name-only HEAD || rg --files || ag -l -g \\\"\\\" || find .\"\n```\n\nThis means files not recognized by git won't be shown. You can either override the\ndefault with `let $SKIM_DEFAULT_COMMAND = ''` or locate the missing files by\nyourself.\n\n# Differences from fzf\n\n[fzf](https:\u002F\u002Fgithub.com\u002Fjunegunn\u002Ffzf) is a command-line fuzzy finder written\nin Go and [skim](https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim) tries to implement a new one\nin Rust!\n\nThis project is written from scratch. Some decisions of implementation are\ndifferent from fzf. For example:\n\n1. `skim` has an interactive mode.\n2. `skim` supports pre-selection.\n3. The fuzzy search algorithm is different.\n\nMore generally, `skim`'s maintainers allow themselves some freedom of implementation.\nThe goal is to keep `skim` as feature-full as `fzf` is, but the command flags might differ.\n\n# How to contribute\n\n[Create new issues](https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Fissues\u002Fnew) if you encounter any bugs\nor have any ideas. Pull requests are warmly welcomed.\n\n## Windows compatibility testing\n\nA `Vagrantfile` is included to spin up a headless Windows Server 2022 Core VM for testing\nWindows compatibility without needing a GUI. It requires [VirtualBox](https:\u002F\u002Fwww.virtualbox.org\u002F)\nand [Vagrant](https:\u002F\u002Fwww.vagrantup.com\u002F) on your host (`vagrant` is included in the Nix dev\nshell via `flake.nix`).\n\n```sh\nvagrant up          # First boot: downloads the box and provisions (~15–20 min)\nssh -p 2222 vagrant@localhost   # Password: vagrant\n```\n\nInside the VM, the project root is mounted at `C:\\vagrant`:\n\n```powershell\ncd C:\\vagrant\ncargo build\ncargo test\n```\n\nSubsequent boots are fast — provisioning only runs once:\n\n```sh\nvagrant halt        # Stop the VM\nvagrant up          # Resume\nvagrant destroy     # Delete the VM entirely\n```\n\n# Troubleshooting\n\nTo troubleshoot what's happening, you can set the environment variable `SKIM_LOG` or the flag `--log-level` to either `debug` or even `trace`, and set the environment variable `SKIM_LOG_FILE` or the flag `--log-file` to a path. You can then read those logs during or after the execution to better understand what's happening. Don't hesitate to add those logs to an issue if you need help.\n\n## No line feed issues with nix, FreeBSD, termux\n\nIf you encounter display issues like:\n\n```bash\n$ for n in {1..10}; do echo \"$n\"; done | sk\n  0\u002F10 0\u002F0.> 10\u002F10  10  9  8  7  6  5  4  3  2> 1\n```\n\nFor example\n\n- https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Fissues\u002F412\n- https:\u002F\u002Fgithub.com\u002Fskim-rs\u002Fskim\u002Fissues\u002F455\n\nYou need to set TERMINFO or TERMINFO_DIRS to the path of a correct terminfo database path\n\nFor example, with termux, you can add this in your bashrc:\n\n```\nexport TERMINFO=\u002Fdata\u002Fdata\u002Fcom.termux\u002Ffiles\u002Fusr\u002Fshare\u002Fterminfo\n```\n\n# Benchmarks\n\n## Interactive benchmark (`cli`)\n\nThe `cli` bench benchmarks skim (or any compatible binary) against other versions or fzf by running the interactive interface inside a tmux session and polling the status line until the matched count stabilises. This is by no means a precise or foolproof measurement, but it has the added benefit of benchmarking against `fzf` and of providing resource metrics (peak RSS and CPU).\n\n```sh\ncargo bench --bench cli -- run                              # defaults: sk, 1 M items, query \"test\"\ncargo bench --bench cli -- run sk -n 500000 -q foo              # bare name resolved via $PATH\ncargo bench --bench cli -- run .\u002Fold\u002Fsk .\u002Fnew\u002Fsk -r 5           # compare two binaries, 5 runs each\ncargo bench --bench cli -- run sk -f input.txt -q search        # use an existing file\ncargo bench --bench cli -- generate -f testdata.txt -n 2000000       # generate input file and exit\ncargo bench --bench cli -- run sk --perf                            # record perf data (auto-named file)\ncargo bench --bench cli -- run sk --strace                            # record strace data (auto-named file)\ncargo bench --bench cli -- run sk -p perf.data                 # record perf data to perf.data\ncargo bench --bench cli -- run sk -j                            # JSON output\ncargo bench --bench cli -- run sk -r 3 -- --tiebreak=index     # pass extra flags to sk\n```\n\nBinary names are resolved to absolute paths via `which` before use, so bare names like `sk` or `fzf` work as long as they are on `$PATH`.\n\n### Criterion benchmarks\n\nCriterion benchmarks are available to measure skim's performance more precisely.\nTo run them, you need to generate input data using `cargo bench --bench cli -- -g benches\u002Ffixtures\u002F10M.txt -n 10000000 && cargo bench --bench cli -- -g benches\u002Ffixtures\u002F1M.txt -n 1000000`, then run `cargo bench -j 1`.\n\nThese will run for several minutes.\n","Skim 是一个用 Rust 编写的模糊查找工具，旨在提高文件、行和命令的导航效率。其核心功能包括快速搜索、智能匹配以及支持多种使用场景如 Vim 插件、过滤器及交互界面等。技术上，Skim 利用了 Ratatui 库构建用户界面，并通过高效的算法实现高性能搜索。适用于需要频繁进行文本搜索与筛选的开发环境或日常工作中，能够显著提升工作效率。MIT 许可证下开源，社区活跃，提供丰富的自定义选项满足不同需求。",2,"2026-06-11 03:04:16","top_language"]