Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
gha-lab-456dd8a245 — Лаборатория исследований безопасности, воспроизводящая CVE-2026-41414 (pull_request_target pwn в .github/workflows/pr.yml) — снимок skim-rs/skim @ ca986f4, не форк. | Kitploit
Инструменты/GitHubGitHub/pvharmo2/gha-lab-456dd8a245
Анализ уязвимостейЭксплуатацияБезопасность Цепочки ПоставокОбучение и ОбразованиеПодобранные Ресурсы
GitHubpvharmo2/gha-lab-456dd8a245

gha-lab-456dd8a245

Лаборатория исследований безопасности, воспроизводящая CVE-2026-41414 (pull_request_target pwn в .github/workflows/pr.yml) — снимок skim-rs/skim @ ca986f4, не форк.

Репозиторий
16 ч 33 мин назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Автоматически созданный исследовательский артефакт — не вышестоящий проект.

Этот репозиторий — одноразовая лаборатория, созданная автоматизированной системой для магистерской диссертации в Université Laval по воспроизведению опубликованных уязвимостей в рабочих процессах GitHub Actions. Это точный снимок skim-rs/skim на коммите ca986f444c37d2c1dc15ce1fad2fe101776af8d9 (2026-04-14), распространённый под собственной лицензией этого проекта, файл которой включён в этот снимок без изменений.

Вышестоящий проект не участвует, никогда не является целью, а изучаемая здесь уязвимость уже публична. Каждый секрет и переменная в этом репозитории — случайно сгенерированное фиктивное значение — никаких реальных учётных данных здесь нет. Ссылки на действия и образы раннеров закреплены на те значения, которым они соответствовали на 2026-04-14; см. pinning.md в выводе системы для каждого изменения, внесённого в снимок.

Вопросы или возражения: [email protected]


Crates.io Build & Test codecov badge

Packaging status
Skim Discord
Skim Matrix room
Built with Ratatui

Жизнь коротка — пользуйся skim!

Мы тратим так много времени на навигацию по файлам, строкам и командам. Вот тут и появляется Skim! Это мощный нечёткий поисковик (fuzzy finder), созданный, чтобы сделать ваш рабочий процесс быстрее и эффективнее.

skim demo

Skim предоставляет один исполняемый файл под названием sk. Считайте его более умной альтернативой таким инструментам, как grep — попробовав его однажды, вы удивитесь, как жили без него раньше!

Содержание

  • Установка
    • Менеджеры пакетов
    • Вручную
  • Использование
    • Как плагин Vim
    • Как фильтр
    • Как интерактивный интерфейс
    • Привязки оболочки
    • Привязки клавиш
    • Синтаксис поиска
    • Код выхода
  • Инструменты, совместимые с skim
    • Плагин fzf-lua для neovim
    • nu_plugin_skim
  • Настройка
    • Раскладка клавиш
    • Критерии сортировки
    • Цветовая схема
    • Прочее
  • Продвинутые темы
    • Интерактивный режим
      • Как это работает?
    • Запуск внешних программ
    • Алгоритмы
    • Окно предпросмотра
      • Как это работает?
    • Поддержка полей
    • Использование как библиотеки
    • Бенчмарки
  • FAQ
    • Как игнорировать файлы?
    • Некоторые файлы не отображаются в плагине Vim
  • Отличия от fzf
  • Как внести вклад
    • Тестирование совместимости с Windows
  • Устранение неполадок
    • Проблемы с переводом строки в nix, FreeBSD, termux

Установка

Проект skim содержит несколько компонентов:

  1. Исполняемый файл sk — основная программа
  2. Плагин Vim/Nvim — для вызова sk внутри Vim/Nvim. Проверьте skim.vim для поддержки Vim.

Менеджеры пакетов

ОСМенеджер пакетовКоманда
macOSHomebrewbrew install sk
macOSMacPortssudo port install skim
Alpineapkapk add skim
Archpacmanpacman -S skim
FedoraCOPRсм. ниже
GentooPortageemerge --ask app-misc/skim
Guixguixguix install skim
VoidXBPSxbps-install -S skim
Packaging status

Fedora

Актуальные пакеты Fedora предоставляются через неофициальный репозиторий COPR, поддерживаемый сообществом.```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim

root@kitploit:~
## Вручную

Подходит любой из следующих способов:

- Использование скрипта установки:
    ```sh
    # Всегда проверяйте содержимое скрипта перед его запуском!
    $ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
    ```
- Использование бинарного файла: просто [скачайте исполняемый файл sk](https://github.com/skim-rs/skim/releases) напрямую.
- Установка из [crates.io](https://crates.io/): `cargo install skim`
- Сборка вручную:
    ```sh
    $ git clone --depth 1 [email protected]:skim-rs/skim.git ~/.skim
    $ cd ~/.skim
    $ cargo build --release
    $ # Добавьте полученный исполняемый файл `target/release/sk` в ваш PATH
    ```

После этого вам будут доступны:

- Страница руководства (man page), которую можно либо записать в правильный путь, либо запустить `man --local-file <(sk --man)`
- Автодополнение для оболочки (и опциональные привязки клавиш) с помощью `source <(sk --shell \<shell> \[--shell-bindings])`, подробности см. ниже

# Использование

Skim можно использовать либо как универсальный фильтр (по аналогии с `grep`), либо как
интерактивный интерфейс для запуска команд.

## Как плагин для Vim (для neovim смотрите [fzf-lua](https://github.com/ibhagwan/fzf-lua) с профилем skim)

Через vim-plug (рекомендуется):

Установите skim, затем:```vim
Plug 'skim-rs/skim'

В качестве фильтра

Вот несколько примеров для начала:```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:~
Эта последняя команда позволяет выбрать файлы с расширением «.rs» и открывает
ваши выделения в Vim — отличная экономия времени для разработчиков!

## Как интерактивный интерфейс

`skim` может динамически вызывать другие команды. Обычно вы захотите
интегрировать его с [grep](https://www.gnu.org/software/grep/),
[ack](https://github.com/petdance/ack2),
[ag](https://github.com/ggreer/the_silver_searcher) или
[rg](https://github.com/BurntSushi/ripgrep) для поиска содержимого в
каталоге проекта:```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}'

Примечание: В этих примерах {q} будет буквально подставлено как текущий вводимый запрос (заключённый в одинарные кавычки). Это означает, что данные примеры будут искать точную строку запроса, а не нечётко. Для нечёткого поиска передавайте вывод команды в sk без использования интерактивного режима.

демонстрация интерактивного режима

Привязки оболочки

Привязки для Fish, Bash и Zsh доступны в каталоге shell:

  • completion.{shell} содержит скрипты автодополнения для использования sk в командной строке
  • key-bindings.{shell} содержит сочетания клавиш и интеграции с оболочкой:
    • ctrl-t для выбора файла через sk
    • ctrl-r для выбора записи из истории через sk
    • alt-c для перехода cd в каталог, выбранный через sk
    • (недоступно в fish) ** для автодополнения путей к файлам, например ls **<tab> покажет виджет sk для выбора папки

Чтобы включить эти функции, подключите файл key-bindings.{shell} и настройте автодополнение в соответствии с документацией вашей оболочки или см. ниже.

Автодополнение оболочки

Вы можете сгенерировать автодополнение для вашей предпочтительной оболочки с помощью флага --shell с одной из поддерживаемых оболочек: bash, zsh, fish, powershell или elvish:

Вариант 1: Подключение напрямую в текущей сессии оболочки```sh

For bash

source <(sk --shell bash)

For zsh

source <(sk --shell zsh)

For fish

sk --shell fish | source

root@kitploit:~
#### Вариант 2: Сохранение в файл для автоматической загрузки при запуске оболочки```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

Привязки клавиш

Некоторые часто используемые привязки клавиш:

КлавишаДействие
EnterПринять (выбрать текущий вариант и выйти)
ESC/Ctrl-GПрервать
Ctrl-P/ВверхПереместить курсор вверх
Ctrl-N/ВнизПереместить курсор вниз
TABПереключить выбор и переместиться вниз (с -m)
Shift-TABПереключить выбор и переместиться вверх (с -m)

Полный список привязок клавиш приведён на странице руководства (man sk).

Синтаксис поиска

skim заимствует синтаксис fzf для сопоставления элементов:

ТокенТип сопоставленияОписание
textнечёткое сопоставлениеэлементы, соответствующие text
^musicточное по префиксуэлементы, начинающиеся с music
.mp3$точное по суффиксуэлементы, заканчивающиеся на .mp3
'wildточное (в кавычках)элементы, содержащие wild
!fireобратное точноеэлементы, не содержащие fire
!.mp3$обратное точное по суффиксуэлементы, не заканчивающиеся на .mp3

skim также поддерживает комбинацию токенов.

  • Пробел означает И. С термином src main skim будет искать элементы, соответствующие обоим src и main.

  • | означает ИЛИ (обратите внимание на пробелы вокруг |). С термином .md$ | .markdown$ skim будет искать элементы, заканчивающиеся либо на .md, либо на .markdown.

  • ИЛИ имеет более высокий приоритет. Например, readme .md$ | .markdown$ интерпретируется как readme И (.md$ ИЛИ .markdown$).

  • При использовании опции --split-match каждая часть вокруг пробелов или | будет сопоставляться раздельно:

    • Если значение опции (по умолчанию :) отсутствует в запросе, выполняется обычное сопоставление
    • Если оно присутствует, всё, что находится до него, сопоставляется со всем, что находится до него в элементах, а всё, что после него (включая возможные другие вхождения разделителя), — с частью после него в элементах. Это особенно полезно при передаче входных данных из rg для сопоставления как по имени файла, так и по содержимому.

Если вы предпочитаете использовать регулярные выражения, skim предлагает режим regex:```sh sk --regex

root@kitploit:~
Вы можете динамически переключиться в режим `regex`, нажав `Ctrl-R` (Rotate Mode).

## exit code

| Exit Code | Значение                            |
|-----------|-------------------------------------|
| 0         | Завершено нормально                 |
| 1         | Совпадений не найдено               |
| 130       | Прервано с помощью Ctrl-C/Ctrl-G/ESC и т.д. |

# Инструменты, совместимые с `skim`

Эти инструменты совместимы с `skim` или стремятся к этому:

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

Плагин для [neovim](https://neovim.io), позволяющий использовать fzf и skim для навигации по вашему коду.

Установите его с помощью вашего менеджера пакетов, следуя README. Например, с `lazy.nvim`:```lua
{
  "ibhagwan/fzf-lua",
  -- enable `sk` support instead of the default `fzf`
  opts = {'skim'}
}

nu_plugin_skim

Плагин для nushell, обеспечивающий более качественное взаимодействие между skim и nushell.

Следуя инструкциям в README плагина, вы можете установить его с помощью cargo:```nu cargo install nu_plugin_skim plugin add ~/.cargo/bin/nu_plugin_skim

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

Загружаемый модуль `sqlite`, который добавляет функцию `skim_score` в SQL-запросы.

# Настройка

Документация здесь — лишь краткий обзор, полный список опций смотрите в man-странице (`man sk`).

## Раскладка клавиш

Указывайте привязки парами через запятую (без пробелов). Например:```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'

Кроме того, используйте + для объединения действий, например execute-silent(echo {} | pbcopy)+abort.

Подробности см. в разделе KEY BINDINGS справочной страницы.

Критерии сортировки

Для результатов существует пять ключей сортировки: score, index, begin, end, length. Вы можете указать, как записи сортируются, с помощью sk --tiebreak score,index,-begin или в любом другом нужном вам порядке.

Цветовая схема

Вероятно, у вас есть собственные эстетические предпочтения! К счастью, вы не ограничены внешним видом по умолчанию — Skim поддерживает всестороннюю настройку своей цветовой схемы.```sh --color=[BASE_SCHEME][,COLOR:ANSI]

root@kitploit:~
Skim также учитывает переменную окружения `NO_COLOR`. Установите её в любое значение, и `sk` (а также многие другие терминальные приложения) отключит весь цветной вывод. Подробнее см. на [no-color.org](https://no-color.org/).

### Доступные базовые цветовые схемы

Skim поставляется с несколькими встроенными цветовыми схемами, которые можно использовать в качестве отправной точки:```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)

Настройка цветов

Вы можете настроить отдельные элементы интерфейса, указав значения цветов после базовой схемы:```sh sk --color=light,fg:232,bg:255,current_bg:116,info:27

root@kitploit:~
Цвета можно задавать несколькими способами:

- ANSI-цвета (0-255): `sk --color=fg:232,bg:255`
- Шестнадцатеричные значения RGB: `sk --color=fg:#FF0000` (красный текст)

### Доступные параметры настройки цвета

Можно настроить следующие элементы интерфейса:

| Элемент             | Описание                                        | Пример                           |
|---------------------|-------------------------------------------------|----------------------------------|
| `fg`                | Цвет обычного текста (передний план)            | `--color=fg:232`                 |
| `bg`                | Цвет фона обычного текста                       | `--color=bg:255`                 |
| `matched`           | Совпавший текст в результатах поиска            | `--color=matched:108`            |
| `matched_bg`        | Фон совпавшего текста                           | `--color=matched_bg:0`           |
| `current`           | Цвет текущей строки (передний план)             | `--color=current:254`            |
| `current_bg`        | Цвет фона текущей строки                        | `--color=current_bg:236`         |
| `current_match`     | Совпавший текст в текущей строке                | `--color=current_match:151`      |
| `current_match_bg`  | Фон совпавшего текста в текущей строке          | `--color=current_match_bg:236`   |
| `spinner`           | Цвет индикатора выполнения                      | `--color=spinner:148`            |
| `info`              | Цвет строки информации                          | `--color=info:144`               |
| `prompt`            | Цвет приглашения ввода                          | `--color=prompt:110`             |
| `cursor`            | Цвет курсора                                    | `--color=cursor:161`             |
| `selected`          | Цвет маркера выбранного элемента                | `--color=selected:168`           |
| `header`            | Цвет текста заголовка                           | `--color=header:109`             |
| `border`            | Цвет границы для предпросмотра/раскладки        | `--color=border:59`              |

### Примеры```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

Для получения дополнительных сведений обратитесь к man-странице (man sk).

Разное

  • --ansi: для разбора ANSI-кодов цветов (например, \e[32mABC) источника данных
  • --regex: использовать запрос как регулярное выражение для сопоставления с источником данных

Дополнительные темы

Интерактивный режим

В интерактивном режиме вы можете динамически вызывать команду. Попробуйте:```sh sk --ansi -i -c 'rg --color=always --line-number {q}'

root@kitploit:~
### Как это работает?

![Как работает интерактивный режим Skim](https://assets.kitploit.com/production/public/readmes/54416/5895df8cd6dbe8dfe20cafd1bf0b23fd690191710c00f811e110aba228b32a35/a7b995846d08eb2aa7f351371b38a9a35261eb393632363f62c6a67785f4038e-display-v1.webp)

- Skim принимает два вида источников: вывод команды или данные из конвейера (piped input)
- Skim имеет два вида подсказок: подсказка запроса для указания шаблона поиска и
    подсказка команды для указания «аргументов» команды
- `-c` используется для указания команды, которую нужно выполнить, и по умолчанию принимает значение `SKIM_DEFAULT_COMMAND`
- `-i` указывает Skim открыть подсказку команды при запуске, которая по умолчанию будет показывать `c>`.

Чтобы дополнительно сузить результаты, возвращаемые командой, нажмите
`Ctrl-Q`, чтобы переключиться в интерактивный режим.

## Запуск внешних программ

Вы можете настроить привязки клавиш для запуска внешних процессов, не выходя из Skim (`execute`, `execute-silent`).```sh
# Press F1 to open the file with less without leaving skim
# Press CTRL-Y to copy the line to clipboard and aborts skim (requires pbcopy)
sk --bind 'f1:execute(less -f {}),ctrl-y:execute-silent(echo {} | pbcopy)+abort'

Алгоритмы

Skim предлагает несколько алгоритмов, полный список см. в справке или man-странице. Среди них:

  • skim_v2, алгоритм по умолчанию, частично основанный на алгоритме fzf
  • frizbee, использует frizbee, устойчивый к опечаткам алгоритм из плагина blink.cmp для neovim (только x86_64 и aarch64)
  • fzy, основан на алгоритме fzy, расширенном для базовой устойчивости к опечаткам
  • arinae, новейший алгоритм skim, разработанный внутри компании с учётом устойчивости к опечаткам, развивающий все вышеперечисленные подходы, чтобы сделать сопоставление с учётом опечаток более естественным, сохраняя при этом производительность на элемент на высочайшем уровне

Окно предпросмотра

Это отличная функция fzf, которую skim заимствует. Например, мы используем 'ag' для поиска совпадающих строк, и когда мы сужаем выбор до целевых строк, мы хотим окончательно решить, какие строки выбрать, проверив контекст вокруг строки. grep и ag имеют опцию --context, и skim может использовать --context для улучшенного окна предпросмотра. Например:```sh sk --ansi -i -c 'ag --color {q}' --preview "preview.sh {}"

root@kitploit:~
(Обратите внимание, что [preview.sh](https://github.com/junegunn/fzf.vim/blob/master/bin/preview.sh) — это скрипт для вывода контекста по заданным filename:lines:columns)

Вы получите примерно следующее:

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

### Как это работает?

Если команда предпросмотра задана через опцию `--preview`, skim заменит
`{}` на текущую подсвеченную строку, заключённую в одинарные кавычки, вызовет
команду для получения вывода и отобразит этот вывод в окне предпросмотра.

Иногда вам не нужна вся строка для вызова команды. В этом случае
вы можете использовать `{}`, `{1..}`, `{..3}` или `{1..5}` для выбора полей.
Синтаксис объяснён в разделе [Fields Support](#filds-support).

Наконец, вы можете настроить положение окна предпросмотра с помощью `--preview-window`:
- `--preview-window up:30%` — разместить окно сверху с высотой
    30% от общей высоты skim.
- `--preview-window left:10:wrap` — указать `wrap`, что позволяет окну
    предпросмотра переносить вывод команды предпросмотра.
- `--preview-window wrap:hidden` — скрыть окно предпросмотра при запуске; позже
    его можно показать с помощью действия `toggle-preview`.

## Fields support

Обычно это нужно понимать только пользователям плагинов.

Например, у вас есть источник данных с форматом:```sh
<filename>:<line number>:<column number>

Однако вы хотите искать <filename> только при вводе запросов. Это означает, что при вводе 21 вы хотите найти <filename>, содержащий 21, но не сопоставляя номер строки или номер столбца.

Вы можете использовать sk --delimiter ':' --nth 1 для этого.

Вы также можете использовать --with-nth для изменения порядка полей.

Синтаксис диапазонов

  • <num> — указывает на num-е поле, начиная с 1.
  • start.. — начиная с start-го поля и до конца.
  • ..end — начиная с 0-го поля и до end-го поля, включая end.
  • start..end — начиная с start-го поля и до end-го поля, включая end.

Использование в качестве библиотеки

Skim можно использовать как библиотеку в ваших Rust-крейтах.

Сначала добавьте skim в ваш Cargo.toml:```toml [dependencies] skim = { version = "", default-features = false, features = [..] }

root@kitploit:~
_Примечание о функциях_:
    - функция `cli` требуется для использования skim в качестве интерфейса командной строки; она *не должна* быть нужна при использовании его как библиотеки.

### Базовое использование

Затем попробуйте запустить этот простой пример:```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());
    }
}

Детальное использование

Вы также можете получить детальное использование skim как библиотеки с помощью tokio и асинхронного кода, что позволяет динамически взаимодействовать с

Внутреннее устройство

При наличии Option<SkimItemReceiver> skim будет соответствующим образом считывать элементы, выполнять свою работу и возвращать нам выбор пользователя, включая выбранные элементы, запрос и т.д. Обратите внимание, что:

  • SkimItemReceiver — это crossbeam::channel::Receiver<Arc<dyn SkimItem>>
  • Если он отсутствует, будет вызвана указанная команда и элементы будут считаны из вывода команды
  • В противном случае элементы будут считаны из (crossbeam) канала.

Трейт SkimItem предоставляется для настройки того, как строка может отображаться, сравниваться и просматриваться. По умолчанию он реализован для AsRef<str>

Кроме того, SkimItemReader — это помощник для преобразования BufRead в SkimItemReceiver (мы можем легко превратить File или String в BufRead), чтобы вы могли легко работать со строками или файлами.

Дополнительные примеры смотрите в каталоге examples/.

Бенчмарки

Эти бенчмарки запускают интерактивный интерфейс в сессии tmux и ожидают стабилизации пользовательского интерфейса.

графики бенчмарков

Вы можете сгенерировать графики, используя just bench-plot или запустив рецепт вручную в GNU bash.

FAQ

Как игнорировать файлы?

Skim вызывает find . для получения списка файлов для фильтрации. Вы можете переопределить это, задав переменную окружения SKIM_DEFAULT_COMMAND. Например:```sh $ SKIM_DEFAULT_COMMAND="fd --type f || git ls-tree -r --name-only HEAD || rg --files || find ." $ sk

root@kitploit:~
Можно добавить это в ваш `.bashrc` или `.zshrc`, если хотите, чтобы оно было по умолчанию.

## Некоторые файлы не отображаются в плагине Vim

Если вы используете плагин Vim и выполняете команду `:SK`, вы можете обнаружить, что некоторые
из ваших файлов не отображаются.

Как описано в [#3](https://github.com/skim-rs/skim/issues/3), в плагине
Vim переменная `SKIM_DEFAULT_COMMAND` по умолчанию устанавливается на команду:```vim
let $SKIM_DEFAULT_COMMAND = "git ls-tree -r --name-only HEAD || rg --files || ag -l -g \"\" || find ."

Это означает, что файлы, не распознанные git, не будут показаны. Вы можете либо переопределить значение по умолчанию с помощью let $SKIM_DEFAULT_COMMAND = '', либо найти отсутствующие файлы самостоятельно.

Отличия от fzf

fzf — это консольный нечёткий поисковик, написанный на Go, а skim пытается реализовать новый такой же на Rust!

Этот проект написан с нуля. Некоторые решения по реализации отличаются от fzf. Например:

  1. У skim есть интерактивный режим.
  2. skim поддерживает предварительный выбор.
  3. Алгоритм нечёткого поиска отличается.

В более общем смысле, сопровождающие skim позволяют себе некоторую свободу реализации. Цель — сохранить skim таким же функционально полным, как fzf, но флаги команд могут отличаться.

Как внести вклад

Создавайте новые issues, если вы столкнулись с какими-либо ошибками или у вас есть какие-либо идеи. Pull request'ы приветствуются.

Тестирование совместимости с Windows

Включён файл Vagrantfile для запуска виртуальной машины Windows Server 2022 Core без графического интерфейса для тестирования совместимости с Windows без необходимости в GUI. Для этого требуются VirtualBox и Vagrant на вашем хосте (vagrant включён в Nix dev shell через flake.nix).```sh vagrant up # First boot: downloads the box and provisions (~15–20 min) ssh -p 2222 vagrant@localhost # Password: vagrant

root@kitploit:~
Внутри виртуальной машины корень проекта смонтирован в `C:\vagrant`:```powershell
cd C:\vagrant
cargo build
cargo test

Последующие загрузки выполняются быстро — подготовка выполняется только один раз:```sh vagrant halt # Stop the VM vagrant up # Resume vagrant destroy # Delete the VM entirely

root@kitploit:~
# Устранение неполадок

Чтобы разобраться в происходящем, вы можете задать переменную окружения `SKIM_LOG` или флаг `--log-level` со значением `debug` или даже `trace`, а также задать переменную окружения `SKIM_LOG_FILE` или флаг `--log-file` с указанием пути. Затем вы можете читать эти журналы во время или после выполнения, чтобы лучше понять, что происходит. Не стесняйтесь добавлять эти журналы в issue, если вам нужна помощь.

## Проблемы с переводами строк в nix, FreeBSD, termux

Если вы столкнулись с проблемами отображения, например:```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

Например

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

Вам нужно установить TERMINFO или TERMINFO_DIRS на путь к корректной базе данных terminfo

Например, с termux вы можете добавить это в ваш bashrc:``` export TERMINFO=/data/data/com.termux/files/usr/share/terminfo

root@kitploit:~
# Бенчмарки

## Интерактивный бенчмарк (`cli`)

Бенчмарк `cli` сравнивает skim (или любой совместимый бинарный файл) с другими версиями или fzf, запуская интерактивный интерфейс внутри сессии tmux и опрашивая строку состояния до тех пор, пока количество совпадений не стабилизируется. Это ни в коем случае не точное или безошибочное измерение, но оно имеет дополнительное преимущество — сравнение с `fzf`, а также предоставление метрик ресурсов (пиковое значение RSS и 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

Имена бинарных файлов перед использованием преобразуются в абсолютные пути через which, поэтому короткие имена вроде sk или fzf работают, если они находятся в $PATH.

Критериальные бенчмарки

Критериальные бенчмарки доступны для более точного измерения производительности skim. Чтобы запустить их, необходимо сгенерировать входные данные с помощью cargo bench --bench cli -- -g benches/fixtures/10M.txt -n 10000000 && cargo bench --bench cli -- -g benches/fixtures/1M.txt -n 1000000, а затем выполнить cargo bench -j 1.

Они будут выполняться в течение нескольких минут.

Скачать инструмент