Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
gha-lab-456dd8a245 — Laboratorio de investigación en seguridad que reproduce CVE-2026-41414 (pwn de pull_request_target en .github/workflows/pr.yml) — instantánea de skim-rs/skim @ ca986f4, no un fork. | Kitploit
Herramientas/GitHubGitHub/pvharmo2/gha-lab-456dd8a245
Análisis de VulnerabilidadesExplotaciónSeguridad de Cadena de SuministroAprendizaje y EducaciónRecursos Curados
GitHubpvharmo2/gha-lab-456dd8a245

gha-lab-456dd8a245

Laboratorio de investigación en seguridad que reproduce CVE-2026-41414 (pwn de pull_request_target en .github/workflows/pr.yml) — instantánea de skim-rs/skim @ ca986f4, no un fork.

Ver Repositorio
1hace 6h 33mAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Artefacto de investigación automatizado — no es el proyecto original.

Este repositorio es un laboratorio desechable construido por un sistema automatizado para una tesis de maestría en la Université Laval sobre la reproducción de vulnerabilidades publicadas en flujos de trabajo de GitHub Actions. Es una instantánea verbatim de skim-rs/skim en el commit ca986f444c37d2c1dc15ce1fad2fe101776af8d9 (2026-04-14), redistribuida bajo la licencia propia de ese proyecto, cuyo archivo se incluye sin cambios en esta instantánea.

El proyecto original no está involucrado, nunca es el objetivo, y la vulnerabilidad estudiada aquí ya es pública. Cada secreto y variable en este repositorio es un valor ficticio generado aleatoriamente — no hay ninguna credencial real presente. Las referencias de acciones y las imágenes de ejecutores están fijadas a lo que resolvieron el 2026-04-14; consulta pinning.md en la salida del sistema para cada cambio realizado en la instantánea.

Preguntas u objeciones: [email protected]


Crates.io Build & Test

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

La vida es corta, ¡skim!

Pasamos mucho de nuestro tiempo navegando entre archivos, líneas y comandos. ¡Ahí es donde entra Skim! Es un potente buscador difuso diseñado para hacer tu flujo de trabajo más rápido y eficiente.

skim demo

Skim proporciona un único ejecutable llamado sk. Piénsalo como una alternativa más inteligente a herramientas como grep: una vez que lo pruebes, ¡te preguntarás cómo pudiste vivir sin él!

Índice de contenidos

  • Instalación
    • Gestores de paquetes
    • Manualmente
  • Uso
    • Como plugin de Vim
    • Como filtro
    • Como interfaz interactiva
    • Enlaces de shell
    • Atajos de teclado
    • Sintaxis de búsqueda
    • Código de salida
  • Herramientas compatibles con skim
    • Plugin fzf-lua para neovim
    • nu_plugin_skim
  • Personalización
    • Mapa de teclas
    • Criterios de ordenación
    • Esquema de colores
    • Varios
  • Temas avanzados
    • Modo interactivo
      • ¿Cómo funciona?
    • Ejecutar programas externos
    • Algoritmos
    • Ventana de vista previa
      • ¿Cómo funciona?
    • Soporte de campos
    • Uso como biblioteca
    • Benchmarks
  • FAQ
    • ¿Cómo ignorar archivos?
    • Algunos archivos no se muestran en el plugin de Vim
  • Diferencias con fzf
  • Cómo contribuir
    • Pruebas de compatibilidad con Windows
  • Solución de problemas
    • Problemas de salto de línea con nix, FreeBSD, termux

Instalación

El proyecto skim contiene varios componentes:

  1. El ejecutable sk — el programa principal
  2. Plugin de Vim/Nvim — para llamar a sk dentro de Vim/Nvim. Consulta skim.vim para soporte de Vim.

Gestores de paquetes

SOGestor de paquetesComando
macOSHomebrewbrew install sk
macOSMacPortssudo port install skim
Alpineapkapk add skim
Archpacmanpacman -S skim
FedoraCOPRver abajo
GentooPortageemerge --ask app-misc/skim
Guixguixguix install skim
VoidXBPSxbps-install -S skim
Packaging status

Fedora

Los paquetes actualizados de Fedora se proporcionan mediante un repositorio COPR no oficial mantenido por la comunidad.```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim

root@kitploit:~
## Manualmente

Se aplica cualquiera de las siguientes opciones:

- Usando el script de instalación:
    ```sh
    # ¡Comprueba siempre el contenido del script antes de ejecutarlo!
    $ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
    ```
- Usando el binario: Simplemente [descarga el ejecutable sk](https://github.com/skim-rs/skim/releases) directamente.
- Instalar desde [crates.io](https://crates.io/): `cargo install skim`
- Compilar manualmente:
    ```sh
    $ git clone --depth 1 [email protected]:skim-rs/skim.git ~/.skim
    $ cd ~/.skim
    $ cargo build --release
    $ # Añade el ejecutable resultante `target/release/sk` a tu PATH
    ```

Entonces tendrás acceso a:

- La página man, que puedes escribir en la ruta correcta o ejecutar `man --local-file <(sk --man)`
- Las completaciones de shell (y atajos de teclado opcionales), usando `source <(sk --shell \<shell> \[--shell-bindings])`, consulta los detalles a continuación

# Uso

Skim se puede usar como un filtro general (similar a `grep`) o como una
interfaz interactiva para ejecutar comandos.

## Como plugin de Vim (en neovim, consulta [fzf-lua](https://github.com/ibhagwan/fzf-lua) con el perfil de skim)

Mediante vim-plug (recomendado):

Instala skim, luego:```vim
Plug 'skim-rs/skim'

Como filtro

Aquí tienes algunos ejemplos para comenzar:```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:~
Este último comando te permite seleccionar archivos con la extensión ".rs" y abre
tus selecciones en Vim: ¡un gran ahorro de tiempo para desarrolladores!

## Como Interfaz Interactiva

`skim` puede invocar otros comandos dinámicamente. Normalmente querrías
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) para buscar contenidos en un
directorio de proyecto:```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: En estos ejemplos, {q} se expandirá literalmente a la consulta de entrada actual (envuelta entre comillas simples). Esto significa que estos ejemplos buscarán la cadena de consulta exacta, no de forma difusa. Para la búsqueda difusa, canaliza la salida del comando hacia sk sin usar el modo interactivo.

demostración del modo interactivo

Enlaces de Shell

Los enlaces para Fish, Bash y Zsh están disponibles en el directorio shell:

  • completion.{shell} contiene los scripts de completado para el uso de la CLI de sk
  • key-bindings.{shell} contiene las combinaciones de teclas y las integraciones de shell:
    • ctrl-t para seleccionar un archivo mediante sk
    • ctrl-r para seleccionar una entrada del historial mediante sk
    • alt-c para hacer cd a un directorio seleccionado mediante sk
    • (no disponible en fish) ** para completar rutas de archivo, por ejemplo, ls **<tab> mostrará un widget de sk para seleccionar una carpeta

Para habilitar estas funciones, carga el archivo key-bindings.{shell} y configura los completados según la documentación de tu shell o consulta a continuación.

Completados de Shell

Puedes generar completados de shell para tu shell preferido usando la bandera --shell con uno de los shells compatibles: bash, zsh, fish, powershell o elvish:

Opción 1: Cargar directamente en tu sesión de shell actual```sh

For bash

source <(sk --shell bash)

For zsh

source <(sk --shell zsh)

For fish

sk --shell fish | source

root@kitploit:~
#### Opción 2: Guardar en un archivo para que se cargue automáticamente al iniciar el 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

Atajos de Teclado

Algunos atajos de teclado de uso común:

TeclaAcción
EnterAceptar (seleccionar el actual y salir)
ESC/Ctrl-GAbortar
Ctrl-P/ArribaMover el cursor hacia arriba
Ctrl-N/AbajoMover el cursor hacia abajo
TABAlternar selección y bajar (con -m)
Shift-TABAlternar selección y subir (con -m)

Para una lista completa de atajos de teclado, consulta la página man (man sk).

Sintaxis de Búsqueda

skim toma prestada la sintaxis de fzf para coincidir elementos:

TokenTipo de coincidenciaDescripción
textcoincidencia difusaelementos que coinciden con text
^musiccoincidencia exacta de prefijoelementos que comienzan con music
.mp3$coincidencia exacta de sufijoelementos que terminan con .mp3
'wildcoincidencia exacta (entre comillas)elementos que incluyen wild
!firecoincidencia exacta inversaelementos que no incluyen fire
!.mp3$coincidencia exacta de sufijo inversaelementos que no terminan con .mp3

skim también admite la combinación de tokens.

  • El espacio en blanco tiene el significado de Y. Con el término src main, skim buscará elementos que coincidan con ambos src y main.

  • | significa O (nota los espacios alrededor de |). Con el término .md$ | .markdown$, skim buscará elementos que terminen con .md o .markdown.

  • O tiene mayor precedencia. Por ejemplo, readme .md$ | .markdown$ se interpreta como readme Y (.md$ O .markdown$).

  • Al usar la opción --split-match, cada parte alrededor de espacios o | se coincidirá de forma dividida:

    • Si el valor de la opción (por defecto :) no está presente en la consulta, se realiza una coincidencia normal
    • Si está presente, coincide todo lo anterior con todo lo anterior en los elementos, y todo lo posterior (incluyendo otras posibles apariciones del delimitador) con la parte posterior en los elementos. Esto es especialmente útil al canalizar entrada desde rg para coincidir tanto en el nombre del archivo como en el contenido.

Si prefieres usar expresiones regulares, skim ofrece un modo regex:```sh sk --regex

root@kitploit:~
Puedes cambiar al modo `regex` dinámicamente presionando `Ctrl-R` (Rotar Modo).

## código de salida

| Código de salida | Significado                          |
|-----------|--------------------------------------|
| 0         | Salida normal                        |
| 1         | No se encontró coincidencia          |
| 130       | Interrumpido por Ctrl-C/Ctrl-G/ESC/etc... |

# Herramientas compatibles con `skim`

Estas herramientas son o pretenden ser compatibles con `skim`:

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

Un complemento de [neovim](https://neovim.io) que permite usar fzf y skim para navegar por tu código.

Instálalo con tu gestor de paquetes, siguiendo el README. Por ejemplo, con `lazy.nvim`:```lua
{
  "ibhagwan/fzf-lua",
  -- enable `sk` support instead of the default `fzf`
  opts = {'skim'}
}

nu_plugin_skim

Un plugin de nushell para permitir una mejor interacción entre skim y nushell.

Siguiendo las instrucciones del README del plugin, puedes instalarlo con cargo:```nu cargo install nu_plugin_skim plugin add ~/.cargo/bin/nu_plugin_skim

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

Un módulo cargable de `sqlite` que habilita una función `skim_score` en
consultas SQL.

# Personalización

La documentación aquí es solo una vista previa; consulta la página man (`man sk`) para obtener una
lista completa de opciones.

## Mapa de teclas

Especifica los enlaces con pares separados por comas (sin espacios permitidos). Por ejemplo:```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'

Además, usa + para concatenar acciones, como execute-silent(echo {} | pbcopy)+abort.

Consulta la sección KEY BINDINGS de la página del manual para más detalles.

Criterios de ordenación

Hay cinco claves de ordenación para los resultados: score, index, begin, end, length. Puedes especificar cómo se ordenan los registros mediante sk --tiebreak score,index,-begin o cualquier otro orden que desees.

Esquema de colores

¡Probablemente tengas tus propias preferencias estéticas! Afortunadamente, no estás limitado a la apariencia predeterminada: Skim admite una personalización exhaustiva de su esquema de colores.```sh --color=[BASE_SCHEME][,COLOR:ANSI]

root@kitploit:~
Skim también respeta la variable de entorno `NO_COLOR`. Establézcala a cualquier valor y `sk` (y muchas otras aplicaciones de terminal) desactivará toda la salida en color. Consulte [no-color.org](https://no-color.org/) para más detalles.

### Esquemas de Color Base Disponibles

Skim incluye varios esquemas de color integrados que puede usar como punto de partida:```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)

Personalización de Colores

Puedes personalizar elementos individuales de la interfaz especificando valores de color después del esquema base:```sh sk --color=light,fg:232,bg:255,current_bg:116,info:27

root@kitploit:~
Los colores se pueden especificar de varias formas:

- Colores ANSI (0-255): `sk --color=fg:232,bg:255`
- Valores hexadecimales RGB: `sk --color=fg:#FF0000` (texto rojo)

### Opciones de Personalización de Color Disponibles

Los siguientes elementos de la interfaz se pueden personalizar:

| Elemento            | Descripción                                 | Ejemplo                        |
|--------------------|---------------------------------------------|--------------------------------|
| `fg`               | Color de primer plano del texto normal      | `--color=fg:232`               |
| `bg`               | Color de fondo del texto normal             | `--color=bg:255`               |
| `matched`          | Texto coincidente en los resultados de búsqueda | `--color=matched:108`      |
| `matched_bg`       | Fondo del texto coincidente                 | `--color=matched_bg:0`         |
| `current`          | Color de primer plano de la línea actual    | `--color=current:254`          |
| `current_bg`       | Color de fondo de la línea actual           | `--color=current_bg:236`       |
| `current_match`    | Texto coincidente en la línea actual        | `--color=current_match:151`    |
| `current_match_bg` | Fondo del texto coincidente en la línea actual | `--color=current_match_bg:236` |
| `spinner`          | Color del indicador de progreso             | `--color=spinner:148`          |
| `info`             | Color de la línea de información            | `--color=info:144`             |
| `prompt`           | Color del prompt                            | `--color=prompt:110`           |
| `cursor`           | Color del cursor                            | `--color=cursor:161`           |
| `selected`         | Color del marcador del elemento seleccionado | `--color=selected:168`        |
| `header`           | Color del texto de cabecera                 | `--color=header:109`           |
| `border`           | Color del borde para vista previa/diseño    | `--color=border:59`            |

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

Para más detalles, consulta la página del manual (man sk).

Misc

  • --ansi: para analizar códigos de color ANSI (p. ej., \e[32mABC) de la fuente de datos
  • --regex: usa la consulta como expresión regular para coincidir con la fuente de datos

Temas avanzados

Modo interactivo

En el modo interactivo, puedes invocar un comando dinámicamente. Pruébalo:```sh sk --ansi -i -c 'rg --color=always --line-number {q}'

root@kitploit:~
### ¿Cómo funciona?

![Cómo funciona el modo interactivo de Skim](https://assets.kitploit.com/production/public/readmes/54416/5895df8cd6dbe8dfe20cafd1bf0b23fd690191710c00f811e110aba228b32a35/a7b995846d08eb2aa7f351371b38a9a35261eb393632363f62c6a67785f4038e-display-v1.webp)

- Skim acepta dos tipos de fuentes: salida de comandos o entrada canalizada (piped input)
- Skim tiene dos tipos de indicadores: un indicador de consulta para especificar el patrón de búsqueda y un
    indicador de comando para especificar los "argumentos" del comando
- `-c` se usa para especificar el comando a ejecutar y por defecto usa `SKIM_DEFAULT_COMMAND`
- `-i` le indica a skim que abra el indicador de comando al iniciar, que mostrará `c>` por defecto.

Para reducir aún más los resultados devueltos por el comando, presione
`Ctrl-Q` para alternar el modo interactivo.

## Ejecutar programas externos

Puede configurar enlaces de teclas para iniciar procesos externos sin salir de 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'

Algoritmos

Skim ofrece múltiples algoritmos; consulta la ayuda o la página del manual para obtener una lista exhaustiva. Entre ellos se incluyen:

  • skim_v2, el algoritmo predeterminado, basado libremente en el algoritmo de fzf
  • frizbee, utiliza frizbee, el algoritmo resistente a errores tipográficos del plugin blink.cmp de neovim (solo x86_64 y aarch64)
  • fzy, basado en el algoritmo de fzy ampliado para una resistencia básica a errores tipográficos
  • arinae, el algoritmo más reciente de skim, diseñado internamente con la resistencia a errores tipográficos en mente, ampliando todos los anteriores para que la coincidencia resistente a errores tipográficos se sienta más natural mientras se mantiene el rendimiento por elemento a los mejores estándares

Ventana de Vista Previa

Esta es una gran característica de fzf que skim toma prestada. Por ejemplo, usamos 'ag' para encontrar las líneas coincidentes y, una vez que reducimos a las líneas objetivo, queremos finalmente decidir qué líneas elegir comprobando el contexto alrededor de la línea. grep y ag tienen la opción --context, y skim puede hacer uso de --context para una mejor ventana de vista previa. Por ejemplo:```sh sk --ansi -i -c 'ag --color {q}' --preview "preview.sh {}"

root@kitploit:~
(Tenga en cuenta que [preview.sh](https://github.com/junegunn/fzf.vim/blob/master/bin/preview.sh) es un script para imprimir el contexto dado nombre_de_archivo:líneas:columnas)

Obtienes cosas como esta:

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

### ¿Cómo funciona?

Si el comando de vista previa se proporciona mediante la opción `--preview`, skim reemplazará
`{}` con la línea resaltada actual rodeada de comillas simples, llamará al
comando para obtener la salida e imprimirá la salida en la ventana de vista previa.

A veces no necesitas la línea completa para invocar el comando. En este caso
puedes usar `{}`, `{1..}`, `{..3}` o `{1..5}` para seleccionar los campos. La
sintaxis se explica en la sección [Soporte de campos](#filds-support).

Por último, es posible que quieras configurar la posición de la ventana de vista previa con `--preview-window`:
- `--preview-window up:30%` para colocar la ventana en la posición superior con una altura
    del 30% de la altura total de skim.
- `--preview-window left:10:wrap` para especificar que `wrap` permite que la ventana de vista previa
    ajuste la salida del comando de vista previa.
- `--preview-window wrap:hidden` para ocultar la ventana de vista previa al inicio; más tarde
    se puede mostrar con la acción `toggle-preview`.

## Soporte de campos

Normalmente solo los usuarios de complementos necesitan entender esto.

Por ejemplo, tienes la fuente de datos con el formato:```sh
<filename>:<line number>:<column number>

Sin embargo, quieres buscar <filename> solo cuando escribes consultas. Eso significa que cuando escribes 21, quieres encontrar un <filename> que contenga 21, pero sin coincidir con el número de línea o el número de columna.

Puedes usar sk --delimiter ':' --nth 1 para lograr esto.

También puedes usar --with-nth para reorganizar el orden de los campos.

Sintaxis de rango

  • <num> -- para especificar el campo num-ésimo, comenzando desde 1.
  • start.. -- comenzando desde el campo start-ésimo y el resto.
  • ..end -- comenzando desde el campo 0-ésimo, hasta el campo end-ésimo, incluyendo end.
  • start..end -- comenzando desde el campo start-ésimo, hasta el campo end-ésimo, incluyendo end.

Uso como biblioteca

Skim se puede usar como biblioteca en tus crates de Rust.

Primero, agrega skim a tu Cargo.toml:```toml [dependencies] skim = { version = "", default-features = false, features = [..] }

root@kitploit:~
_Nota sobre las características_:
    - la característica `cli` es necesaria para usar skim como cli, *no debería* ser necesaria al usarlo como biblioteca.

### Uso básico

Luego intenta ejecutar este sencillo ejemplo:```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());
    }
}

Uso detallado

También puedes obtener un uso detallado de skim como biblioteca usando tokio y código asíncrono, lo que te permite interactuar dinámicamente con

Funcionamiento interno

Dado un Option<SkimItemReceiver>, skim leerá los elementos en consecuencia, hará su trabajo y nos devolverá la selección del usuario, incluidos los elementos seleccionados, la consulta, etc. Ten en cuenta que:

  • SkimItemReceiver es crossbeam::channel::Receiver<Arc<dyn SkimItem>>
  • Si es none, invocará el comando dado y leerá los elementos de la salida del comando
  • De lo contrario, leerá los elementos del canal (crossbeam).

El trait SkimItem se proporciona para personalizar cómo se puede mostrar, comparar y previsualizar una línea. Está implementado por defecto para AsRef<str>

Además, SkimItemReader es un asistente para convertir un BufRead en SkimItemReceiver (podemos convertir fácilmente un File o String en BufRead), de modo que puedas trabajar con cadenas o archivos fácilmente.

Consulta más ejemplos en el directorio examples/.

Benchmarks

Este benchmark ejecuta la interfaz interactiva en una sesión de tmux y espera a que la interfaz de usuario se estabilice.

gráficas de benchmark

Puedes generar las gráficas usando just bench-plot o ejecutando la receta manualmente en GNU bash.

FAQ

¿Cómo ignorar archivos?

Skim invoca find . para obtener una lista de archivos para filtrar. Puedes anular esto configurando la variable de entorno SKIM_DEFAULT_COMMAND. Por ejemplo:```sh $ SKIM_DEFAULT_COMMAND="fd --type f || git ls-tree -r --name-only HEAD || rg --files || find ." $ sk

root@kitploit:~
Puedes ponerlo en tu `.bashrc` o `.zshrc` si quieres que sea el predeterminado.

## Algunos archivos no se muestran en el plugin de Vim

Si usas el plugin de Vim y ejecutas el comando `:SK`, puede que algunos
de tus archivos no se muestren.

Como se describe en [#3](https://github.com/skim-rs/skim/issues/3), en el
plugin de Vim, `SKIM_DEFAULT_COMMAND` se establece al comando por defecto:```vim
let $SKIM_DEFAULT_COMMAND = "git ls-tree -r --name-only HEAD || rg --files || ag -l -g \"\" || find ."

Esto significa que los archivos no reconocidos por git no se mostrarán. Puedes anular el valor predeterminado con let $SKIM_DEFAULT_COMMAND = '' o localizar los archivos faltantes por tu cuenta.

Diferencias con fzf

fzf es un buscador difuso de línea de comandos escrito en Go y skim intenta implementar uno nuevo en Rust.

Este proyecto está escrito desde cero. Algunas decisiones de implementación son diferentes de fzf. Por ejemplo:

  1. skim tiene un modo interactivo.
  2. skim admite preselección.
  3. El algoritmo de búsqueda difusa es diferente.

En términos más generales, los mantenedores de skim se permiten cierta libertad de implementación. El objetivo es mantener skim tan completo en funciones como lo es fzf, pero las banderas de comando pueden diferir.

Cómo contribuir

Crea nuevos issues si encuentras algún error o tienes alguna idea. Las solicitudes de extracción (pull requests) son bienvenidas.

Pruebas de compatibilidad con Windows

Se incluye un Vagrantfile para iniciar una VM headless de Windows Server 2022 Core para probar la compatibilidad con Windows sin necesidad de una GUI. Requiere VirtualBox y Vagrant en tu host (vagrant está incluido en el shell de desarrollo de Nix mediante 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 de la VM, la raíz del proyecto está montada en `C:\vagrant`:```powershell
cd C:\vagrant
cargo build
cargo test

Los arranques posteriores son rápidos: el aprovisionamiento solo se ejecuta una vez:```sh vagrant halt # Stop the VM vagrant up # Resume vagrant destroy # Delete the VM entirely

root@kitploit:~
# Solución de problemas

Para diagnosticar qué está sucediendo, puedes establecer la variable de entorno `SKIM_LOG` o la bandera `--log-level` en `debug` o incluso `trace`, y establecer la variable de entorno `SKIM_LOG_FILE` o la bandera `--log-file` en una ruta. Luego puedes leer esos registros durante o después de la ejecución para comprender mejor qué está ocurriendo. No dudes en añadir esos registros a un issue si necesitas ayuda.

## Problemas de salto de línea con nix, FreeBSD, termux

Si encuentras problemas de visualización como:```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

Por ejemplo

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

Debes configurar TERMINFO o TERMINFO_DIRS con la ruta de una base de datos terminfo correcta

Por ejemplo, con termux, puedes añadir esto en tu bashrc:``` export TERMINFO=/data/data/com.termux/files/usr/share/terminfo

root@kitploit:~
# Benchmarks

## Benchmark interactivo (`cli`)

El benchmark `cli` compara skim (o cualquier binario compatible) con otras versiones o con fzf ejecutando la interfaz interactiva dentro de una sesión de tmux y consultando la línea de estado hasta que el recuento de coincidencias se estabiliza. De ninguna manera es una medición precisa o infalible, pero tiene el beneficio adicional de comparar contra `fzf` y de proporcionar métricas de recursos (RSS máximo y 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

Los nombres de los binarios se resuelven a rutas absolutas mediante which antes de su uso, por lo que nombres simples como sk o fzf funcionan siempre que estén en $PATH.

Benchmarks de criterio

Los benchmarks de criterio están disponibles para medir el rendimiento de skim con mayor precisión. Para ejecutarlos, necesitas generar los datos de entrada usando cargo bench --bench cli -- -g benches/fixtures/10M.txt -n 10000000 && cargo bench --bench cli -- -g benches/fixtures/1M.txt -n 1000000, y luego ejecutar cargo bench -j 1.

Estos tardarán varios minutos en completarse.

Descargar herramienta