Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
gha-lab-456dd8a245 — Laboratório de pesquisa em segurança reproduzindo CVE-2026-41414 (pwn de pull_request_target em .github/workflows/pr.yml) — snapshot de skim-rs/skim @ ca986f4, não um fork. | Kitploit
Ferramentas/GitHubGitHub/pvharmo2/gha-lab-456dd8a245
Análise de VulnerabilidadesExploraçãoSegurança da Cadeia de SuprimentosAprendizado e EducaçãoRecursos Curados
GitHubpvharmo2/gha-lab-456dd8a245

gha-lab-456dd8a245

Laboratório de pesquisa em segurança reproduzindo CVE-2026-41414 (pwn de pull_request_target em .github/workflows/pr.yml) — snapshot de skim-rs/skim @ ca986f4, não um fork.

Ver Repositório
1há 6h 33mAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Artefacto de investigação automatizada — não é o projeto original.

Este repositório é um laboratório descartável construído por um sistema automatizado para uma tese de mestrado na Université Laval sobre a reprodução de vulnerabilidades publicadas em workflows do GitHub Actions. É um instantâneo verbatim de skim-rs/skim no commit ca986f444c37d2c1dc15ce1fad2fe101776af8d9 (2026-04-14), redistribuído sob a licença do próprio projeto, cujo ficheiro está incluído inalterado neste instantâneo.

O projeto original não está envolvido, nunca é alvo, e a vulnerabilidade aqui estudada já é pública. Todos os segredos e variáveis neste repositório são valores fictícios gerados aleatoriamente — nenhuma credencial real está presente. As referências a Actions e imagens de runners estão fixadas no que resolveram em 2026-04-14; consulte pinning.md na saída do harness para todas as alterações feitas ao instantâneo.

Perguntas ou objeções: [email protected]


Crates.io Build & Test codecov badge

Packaging status
Skim Discord
Skim Matrix room
Built with Ratatui

A vida é curta, skim!

Passamos tanto do nosso tempo a navegar por ficheiros, linhas e comandos. É aí que o Skim entra! É um fuzzy finder poderoso concebido para tornar o seu fluxo de trabalho mais rápido e eficiente.

skim demo

O Skim fornece um único executável chamado sk. Pense nele como uma alternativa mais inteligente a ferramentas como grep — depois de experimentar, vai perguntar-se como alguma vez viveu sem ele!

Índice

  • Instalação
    • Gestores de Pacotes
    • Manualmente
  • Utilização
    • Como plugin do Vim
    • Como filtro
    • Como Interface Interativa
    • Bindings de Shell
    • Bindings de Teclas
    • Sintaxe de Pesquisa
    • código de saída
  • Ferramentas compatíveis com skim
    • Plugin fzf-lua para neovim
    • nu_plugin_skim
  • Personalização
    • Mapa de Teclas
    • Critérios de Ordenação
    • Esquema de Cores
    • Diversos
  • Tópicos Avançados
    • Modo interativo
      • Como funciona?
    • Executar programas externos
    • Algoritmos
    • Janela de Pré-visualização
      • Como funciona?
    • Suporte a campos
    • Utilização como biblioteca
    • Benchmarks
  • FAQ
    • Como ignorar ficheiros?
    • Alguns ficheiros não são mostrados no plugin do Vim
  • Diferenças em relação ao fzf
  • Como contribuir
    • Testes de compatibilidade com Windows
  • Resolução de problemas
    • Problemas de falta de avanço de linha com nix, FreeBSD, termux

Instalação

O projeto skim contém vários componentes:

  1. Executável sk — o programa principal
  2. Plugin Vim/Nvim — para chamar sk dentro do Vim/Nvim. Consulte skim.vim para suporte no Vim.

Gestores de Pacotes

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

Fedora

Pacotes Fedora atualizados são fornecidos através de um repositório COPR não oficial mantido pela comunidade.```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim

root@kitploit:~
## Manualmente

Qualquer uma das seguintes opções se aplica:

- Usando o script de instalação:
    ```sh
    # Sempre verifique o conteúdo do script antes de executá-lo!
    $ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
    ```
- Usando o binário: Basta [baixar o executável sk](https://github.com/skim-rs/skim/releases) diretamente.
- Instalar a partir do [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
    $ # Adicione o executável `target/release/sk` resultante ao seu PATH
    ```

Você terá então acesso a:

- A página de manual, que você pode gravar no caminho correto ou executar `man --local-file <(sk --man)`
- As completions de shell (e keybinds opcionais), usando `source <(sk --shell \<shell> \[--shell-bindings])`, veja abaixo para detalhes

# Uso

O Skim pode ser usado tanto como um filtro geral (semelhante ao `grep`) quanto como uma
interface interativa para executar comandos.

## Como plugin do Vim (no neovim, confira [fzf-lua](https://github.com/ibhagwan/fzf-lua) com o perfil skim)

Via vim-plug (recomendado):

Instale o skim, depois:```vim
Plug 'skim-rs/skim'

Como filtro

Aqui estão alguns exemplos para você começar:```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 permite selecionar arquivos com a extensão ".rs" e abre
suas seleções no Vim - uma grande economia de tempo para desenvolvedores!

## Como Interface Interativa

O `skim` pode invocar outros comandos dinamicamente. Normalmente, você vai querer
integrá-lo com [grep](https://www.gnu.org/software/grep/),
[ack](https://github.com/petdance/ack2),
[ag](https://github.com/ggreer/the_silver_searcher), ou
[rg](https://github.com/BurntSushi/ripgrep) para pesquisar conteúdos em um
diretório de projeto:```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: Nestes exemplos, {q} será expandido literalmente para a consulta de entrada atual (entre aspas simples). Isso significa que estes exemplos pesquisarão a string de consulta exata, não de forma difusa. Para pesquisa difusa, canalize a saída do comando para sk sem usar o modo interativo.

demonstração do modo interativo

Integrações de Shell

As integrações para Fish, Bash e Zsh estão disponíveis no diretório shell:

  • completion.{shell} contém os scripts de conclusão para o uso da CLI do sk
  • key-bindings.{shell} contém os atalhos de teclado e as integrações de shell:
    • ctrl-t para selecionar um arquivo através do sk
    • ctrl-r para selecionar uma entrada do histórico através do sk
    • alt-c para cd em um diretório selecionado através do sk
    • (não disponível no fish) ** para completar caminhos de arquivo, por exemplo, ls **<tab> mostrará um widget do sk para selecionar uma pasta

Para ativar esses recursos, carregue o arquivo key-bindings.{shell} e configure as conclusões de acordo com a documentação do seu shell ou veja abaixo.

Conclusões de Shell

Você pode gerar conclusões de shell para o seu shell preferido usando a flag --shell com um dos shells suportados: bash, zsh, fish, powershell ou elvish:

Opção 1: Carregar diretamente na sua sessão de shell atual```sh

For bash

source <(sk --shell bash)

For zsh

source <(sk --shell zsh)

For fish

sk --shell fish | source

root@kitploit:~
#### Opção 2: Guardar num ficheiro para ser carregado automaticamente no arranque do 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

Atalhos de Teclado

Alguns atalhos de teclado comumente usados:

TeclaAção
EnterAceitar (selecionar o atual e sair)
ESC/Ctrl-GAbortar
Ctrl-P/Seta para cimaMover o cursor para cima
Ctrl-N/Seta para baixoMover o cursor para baixo
TABAlternar seleção e mover para baixo (com -m)
Shift-TABAlternar seleção e mover para cima (com -m)

Para uma lista completa de atalhos de teclado, consulte a página de man (man sk).

Sintaxe de Busca

O skim empresta a sintaxe do fzf para correspondência de itens:

TokenTipo de correspondênciaDescrição
textcorrespondência difusaitens que correspondem a text
^musiccorrespondência exata de prefixoitens que começam com music
.mp3$correspondência exata de sufixoitens que terminam com .mp3
'wildcorrespondência exata (entre aspas)itens que incluem wild
!firecorrespondência exata inversaitens que não incluem fire
!.mp3$correspondência exata de sufixo inversaitens que não terminam com .mp3

O skim também suporta a combinação de tokens.

  • Espaço em branco tem o significado de AND. Com o termo src main, o skim buscará itens que correspondam a ambos src e main.

  • | significa OR (observe os espaços ao redor de |). Com o termo .md$ | .markdown$, o skim buscará itens que terminem com .md ou .markdown.

  • OR tem precedência maior. Por exemplo, readme .md$ | .markdown$ é interpretado como readme AND (.md$ OR .markdown$).

  • Ao usar a opção --split-match, cada parte ao redor de espaços ou | será correspondida de forma dividida:

    • Se o valor da opção (padrão :) estiver ausente na consulta, faça uma correspondência normal
    • Se estiver presente, corresponda tudo antes dela a tudo antes dela nos itens, e tudo depois dela (incluindo outras ocorrências potenciais do delimitador) à parte depois dela nos itens. Isso é particularmente útil ao canalizar entrada de rg para corresponder tanto no nome do arquivo quanto no conteúdo.

Se você preferir usar expressões regulares, o skim oferece um modo regex:```sh sk --regex

root@kitploit:~
Pode alternar para o modo `regex` dinamicamente ao pressionar `Ctrl-R` (Modo Rotacionar).

## código de saída

| Código de Saída | Significado                        |
|-----------------|------------------------------------|
| 0               | Saiu normalmente                   |
| 1               | Nenhuma correspondência encontrada |
| 130             | Interrompido por Ctrl-C/Ctrl-G/ESC/etc... |

# Ferramentas compatíveis com `skim`

Estas ferramentas são ou pretendem ser compatíveis com `skim`:

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

Um plugin para [neovim](https://neovim.io) que permite usar fzf e skim para navegar pelo seu código.

Instale-o com o seu gestor de pacotes, seguindo o README. Por exemplo, com `lazy.nvim`:```lua
{
  "ibhagwan/fzf-lua",
  -- enable `sk` support instead of the default `fzf`
  opts = {'skim'}
}

nu_plugin_skim

Um plugin nushell para permitir uma melhor interação entre o skim e o nushell.

Seguindo as instruções no README do plugin, você pode instalá-lo com cargo:```nu cargo install nu_plugin_skim plugin add ~/.cargo/bin/nu_plugin_skim

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

Um módulo carregável do `sqlite` que habilita uma função `skim_score` em
consultas SQL.

# Personalização

A documentação aqui é apenas uma prévia; consulte a página de manual (`man sk`) para uma lista
completa de opções.

## Mapa de teclas

Especifique os atalhos com pares separados por vírgula (sem espaços permitidos). Por exemplo:```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'

Além disso, use + para concatenar ações, como execute-silent(echo {} | pbcopy)+abort.

Consulte a seção KEY BINDINGS da página de manual para obter detalhes.

Critérios de Ordenação

Existem cinco chaves de ordenação para os resultados: score, index, begin, end, length. Você pode especificar como os registros são ordenados por sk --tiebreak score,index,-begin ou qualquer outra ordem que desejar.

Esquema de Cores

Você provavelmente tem suas próprias preferências estéticas! Felizmente, você não está limitado à aparência padrão - o Skim suporta personalização abrangente do seu esquema de cores.```sh --color=[BASE_SCHEME][,COLOR:ANSI]

root@kitploit:~
O Skim também respeita a variável de ambiente `NO_COLOR`. Defina-a com qualquer valor e o `sk` (e muitos outros aplicativos de terminal) desativará toda a saída colorida. Consulte [no-color.org](https://no-color.org/) para mais detalhes.

### Esquemas de Cores Base Disponíveis

O Skim vem com vários esquemas de cores integrados que você pode usar como ponto 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)

Personalizando Cores

Você pode personalizar elementos individuais da interface especificando valores de cor após o esquema base:```sh sk --color=light,fg:232,bg:255,current_bg:116,info:27

root@kitploit:~
As cores podem ser especificadas de várias formas:

- Cores ANSI (0-255): `sk --color=fg:232,bg:255`
- Valores hexadecimais RGB: `sk --color=fg:#FF0000` (texto vermelho)

### Opções de Personalização de Cores Disponíveis

Os seguintes elementos da interface podem ser personalizados:

| Elemento            | Descrição                                 | Exemplo                        |
|--------------------|---------------------------------------------|--------------------------------|
| `fg`               | Cor de primeiro plano do texto normal                | `--color=fg:232`               |
| `bg`               | Cor de fundo do texto normal                | `--color=bg:255`               |
| `matched`          | Texto correspondente nos resultados da pesquisa              | `--color=matched:108`          |
| `matched_bg`       | Fundo do texto correspondente                  | `--color=matched_bg:0`         |
| `current`          | Cor de primeiro plano da linha atual               | `--color=current:254`          |
| `current_bg`       | Cor de fundo da linha atual               | `--color=current_bg:236`       |
| `current_match`    | Texto correspondente na linha atual                | `--color=current_match:151`    |
| `current_match_bg` | Fundo do texto correspondente na linha atual  | `--color=current_match_bg:236` |
| `spinner`          | Cor do indicador de progresso                    | `--color=spinner:148`          |
| `info`             | Cor da linha de informações                      | `--color=info:144`             |
| `prompt`           | Cor do prompt                                | `--color=prompt:110`           |
| `cursor`           | Cor do cursor                                | `--color=cursor:161`           |
| `selected`         | Cor do marcador do item selecionado                  | `--color=selected:168`         |
| `header`           | Cor do texto do cabeçalho                           | `--color=header:109`           |
| `border`           | Cor da borda para pré-visualização/layout             | `--color=border:59`            |

### Exemplos```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 mais detalhes, consulte a página de manual (man sk).

Diversos

  • --ansi: para analisar códigos de cores ANSI (por exemplo, \e[32mABC) da fonte de dados
  • --regex: usar a consulta como expressão regular para corresponder à fonte de dados

Tópicos Avançados

Modo interativo

No modo interativo, você pode invocar um comando dinamicamente. Experimente:```sh sk --ansi -i -c 'rg --color=always --line-number {q}'

root@kitploit:~
### Como funciona?

![Como funciona o modo interativo do Skim](https://assets.kitploit.com/production/public/readmes/54416/5895df8cd6dbe8dfe20cafd1bf0b23fd690191710c00f811e110aba228b32a35/a7b995846d08eb2aa7f351371b38a9a35261eb393632363f62c6a67785f4038e-display-v1.webp)

- O Skim aceita dois tipos de fontes: saída de comandos ou entrada via pipe
- O Skim tem dois tipos de prompts: um prompt de consulta para especificar o padrão de busca e um
    prompt de comando para especificar os "argumentos" do comando
- `-c` é usado para especificar o comando a ser executado e tem como padrão `SKIM_DEFAULT_COMMAND`
- `-i` informa ao skim para abrir o prompt de comando na inicialização, que mostrará `c>` por padrão.

Para refinar ainda mais os resultados retornados pelo comando, pressione
`Ctrl-Q` para alternar o modo interativo.

## Executando programas externos

Você pode configurar atalhos de teclado para iniciar processos externos sem sair do 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'

Algorithms

O Skim oferece vários algoritmos, consulte a ajuda ou a página de manual para uma lista exaustiva. Entre eles estão:

  • skim_v2, o algoritmo padrão, vagamente baseado no algoritmo do fzf
  • frizbee, usa frizbee, o algoritmo resistente a erros de digitação do plugin blink.cmp do neovim (apenas x86_64 e aarch64)
  • fzy, baseado no algoritmo de fzy expandido para resistência básica a erros de digitação
  • arinae, o algoritmo mais recente do skim, projetado internamente com resistência a erros de digitação em mente, expandindo todos os acima para tornar a correspondência resistente a erros de digitação mais natural, mantendo o desempenho por item nos melhores padrões

Janela de Pré-visualização

Esta é uma ótima funcionalidade do fzf que o skim empresta. Por exemplo, usamos 'ag' para encontrar as linhas correspondentes e, uma vez que reduzimos às linhas-alvo, queremos finalmente decidir quais linhas escolher verificando o contexto ao redor da linha. grep e ag têm a opção --context, e o skim pode fazer uso de --context para uma melhor janela de pré-visualização. Por exemplo:```sh sk --ansi -i -c 'ag --color {q}' --preview "preview.sh {}"

root@kitploit:~
(Note que [preview.sh](https://github.com/junegunn/fzf.vim/blob/master/bin/preview.sh) é um script para imprimir o contexto dado filename:lines:columns)

Você obtém coisas assim:

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

### Como funciona?

Se o comando de preview for fornecido pela opção `--preview`, o skim substituirá
o `{}` pela linha atualmente destacada entre aspas simples, chamará o
comando para obter a saída e imprimirá a saída na janela de preview.

Às vezes você não precisa da linha inteira para invocar o comando. Nesse caso,
você pode usar `{}`, `{1..}`, `{..3}` ou `{1..5}` para selecionar os campos. A
sintaxe é explicada na seção [Suporte a campos](#filds-support).

Por fim, você pode querer configurar a posição da janela de preview com `--preview-window`:
- `--preview-window up:30%` para colocar a janela na posição superior com altura
    30% da altura total do skim.
- `--preview-window left:10:wrap` para especificar que o `wrap` permite que a janela
    de preview quebre a saída do comando de preview.
- `--preview-window wrap:hidden` para ocultar a janela de preview na inicialização; depois,
    ela pode ser exibida pela ação `toggle-preview`.

## Suporte a campos

Normalmente, apenas usuários de plugins precisam entender isso.

Por exemplo, você tem a fonte de dados com o formato:```sh
<filename>:<line number>:<column number>

No entanto, você quer pesquisar <filename> apenas ao digitar consultas. Isso significa que quando você digita 21, você quer encontrar um <filename> que contenha 21, mas não corresponder ao número da linha ou ao número da coluna.

Você pode usar sk --delimiter ':' --nth 1 para conseguir isso.

Você também pode usar --with-nth para reorganizar a ordem dos campos.

Sintaxe de Intervalo

  • <num> -- para especificar o num-ésimo campo, começando em 1.
  • start.. -- começando do start-ésimo campo e o restante.
  • ..end -- começando do campo 0, até o campo end, incluindo end.
  • start..end -- começando do campo start, até o campo end, incluindo end.

Uso como biblioteca

O Skim pode ser usado como uma biblioteca em seus crates Rust.

Primeiro, adicione o skim ao seu Cargo.toml:```toml [dependencies] skim = { version = "", default-features = false, features = [..] }

root@kitploit:~
_Nota sobre funcionalidades_:
    - a funcionalidade `cli` é necessária para usar o skim como cli, ela *não* deve ser necessária ao usá-lo como biblioteca.

### Uso básico

Em seguida, tente executar este exemplo simples:```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());
    }
}

Utilização detalhada

Também pode obter uma utilização detalhada do skim como biblioteca usando tokio e código assíncrono, permitindo interagir dinamicamente com

Funcionamento interno

Dado um Option<SkimItemReceiver>, o skim irá ler os itens em conformidade, fazer o seu trabalho e trazer-nos de volta a seleção do utilizador, incluindo os itens selecionados, a consulta, etc. Note que:

  • SkimItemReceiver é crossbeam::channel::Receiver<Arc<dyn SkimItem>>
  • Se for none, irá invocar o comando fornecido e ler os itens a partir da saída do comando
  • Caso contrário, irá ler os itens a partir do canal (crossbeam).

O trait SkimItem é fornecido para personalizar a forma como uma linha pode ser apresentada, comparada e pré-visualizada. É implementado por defeito para AsRef<str>

Além disso, SkimItemReader é um auxiliar para converter um BufRead em SkimItemReceiver (podemos facilmente transformar um File ou String em BufRead), para que possa lidar facilmente com strings ou ficheiros.

Consulte mais exemplos no diretório examples/.

Benchmarks

Estes benchmarks executam a interface interativa numa sessão tmux e aguardam que a interface estabilize.

gráficos de benchmark

Pode gerar os gráficos usando just bench-plot ou executando a receita manualmente em GNU bash.

FAQ

Como ignorar ficheiros?

O Skim invoca find . para obter uma lista de ficheiros para filtragem. Pode substituir isto definindo a variável de ambiente SKIM_DEFAULT_COMMAND. Por exemplo:```sh $ SKIM_DEFAULT_COMMAND="fd --type f || git ls-tree -r --name-only HEAD || rg --files || find ." $ sk

root@kitploit:~
Podes colocá-lo no teu `.bashrc` ou `.zshrc` se quiseres que seja o padrão.

## Alguns ficheiros não são mostrados no plugin do Vim

Se usares o plugin do Vim e executares o comando `:SK`, podes descobrir que alguns
dos teus ficheiros não são mostrados.

Conforme descrito em [#3](https://github.com/skim-rs/skim/issues/3), no plugin
do Vim, `SKIM_DEFAULT_COMMAND` é definido para o comando por predefinição:```vim
let $SKIM_DEFAULT_COMMAND = "git ls-tree -r --name-only HEAD || rg --files || ag -l -g \"\" || find ."

Isto significa que os ficheiros não reconhecidos pelo git não serão apresentados. Pode substituir o padrão com let $SKIM_DEFAULT_COMMAND = '' ou localizar os ficheiros em falta por si próprio.

Diferenças em relação ao fzf

O fzf é um localizador difuso de linha de comandos escrito em Go e o skim tenta implementar um novo em Rust!

Este projeto foi escrito de raiz. Algumas decisões de implementação são diferentes das do fzf. Por exemplo:

  1. O skim tem um modo interativo.
  2. O skim suporta pré-seleção.
  3. O algoritmo de pesquisa difusa é diferente.

De um modo mais geral, os mantenedores do skim permitem-se alguma liberdade de implementação. O objetivo é manter o skim tão completo em funcionalidades como o fzf é, mas os sinalizadores de comando podem diferir.

Como contribuir

Crie novos issues se encontrar quaisquer bugs ou tiver quaisquer ideias. Pull requests são bem-vindos.

Testes de compatibilidade com Windows

Um Vagrantfile está incluído para iniciar uma VM headless do Windows Server 2022 Core para testar a compatibilidade com Windows sem necessidade de GUI. Requer VirtualBox e Vagrant no seu host (o vagrant está incluído na shell de desenvolvimento Nix via 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 da VM, a raiz do projeto está montada em `C:\vagrant`:```powershell
cd C:\vagrant
cargo build
cargo test

Os arranques subsequentes são rápidos — o provisionamento é executado apenas uma vez:```sh vagrant halt # Stop the VM vagrant up # Resume vagrant destroy # Delete the VM entirely

root@kitploit:~
# Resolução de Problemas

Para diagnosticar o que está acontecendo, você pode definir a variável de ambiente `SKIM_LOG` ou a flag `--log-level` para `debug` ou até mesmo `trace`, e definir a variável de ambiente `SKIM_LOG_FILE` ou a flag `--log-file` para um caminho. Você pode então ler esses logs durante ou após a execução para entender melhor o que está acontecendo. Não hesite em adicionar esses logs a uma issue se precisar de ajuda.

## Problemas de quebra de linha com nix, FreeBSD, termux

Se você encontrar problemas de exibição 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 exemplo

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

Você precisa definir TERMINFO ou TERMINFO_DIRS para o caminho de um banco de dados terminfo correto

Por exemplo, com o termux, você pode adicionar isto no seu bashrc:``` export TERMINFO=/data/data/com.termux/files/usr/share/terminfo

root@kitploit:~
# Benchmarks

## Benchmark interativo (`cli`)

O benchmark `cli` avalia o skim (ou qualquer binário compatível) em comparação com outras versões ou com o fzf, executando a interface interativa dentro de uma sessão tmux e consultando a linha de status até que a contagem de correspondências se estabilize. Esta não é, de forma alguma, uma medição precisa ou infalível, mas tem o benefício adicional de comparar com o `fzf` e de fornecer métricas de recursos (pico de RSS e CPU).```sh
cargo bench --bench cli -- run                              # defaults: sk, 1 M items, query "test"
cargo bench --bench cli -- run sk -n 500000 -q foo              # bare name resolved via $PATH
cargo bench --bench cli -- run ./old/sk ./new/sk -r 5           # compare two binaries, 5 runs each
cargo bench --bench cli -- run sk -f input.txt -q search        # use an existing file
cargo bench --bench cli -- generate -f testdata.txt -n 2000000       # generate input file and exit
cargo bench --bench cli -- run sk --perf                            # record perf data (auto-named file)
cargo bench --bench cli -- run sk --strace                            # record strace data (auto-named file)
cargo bench --bench cli -- run sk -p perf.data                 # record perf data to perf.data
cargo bench --bench cli -- run sk -j                            # JSON output
cargo bench --bench cli -- run sk -r 3 -- --tiebreak=index     # pass extra flags to sk

Os nomes dos binários são resolvidos para caminhos absolutos via which antes do uso, portanto nomes simples como sk ou fzf funcionam desde que estejam no $PATH.

Benchmarks de critério

Os benchmarks de critério estão disponíveis para medir o desempenho do skim com mais precisão. Para executá-los, você precisa gerar os dados 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 e, em seguida, executar cargo bench -j 1.

Eles levarão vários minutos para serem concluídos.

Baixar ferramenta