Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
gha-lab-456dd8a245 — 보안 연구 랩으로, CVE-2026-41414(.github/workflows/pr.yml의 pull_request_target pwn)를 재현합니다 — skim-rs/skim @ ca986f4의 스냅샷이며, 포크가 아닙니다. | Kitploit
도구/GitHubGitHub/pvharmo2/gha-lab-456dd8a245
Vulnerability AnalysisExploitationSupply Chain SecurityLearning & EducationCurated Resources
GitHubpvharmo2/gha-lab-456dd8a245

gha-lab-456dd8a245

보안 연구 랩으로, CVE-2026-41414(.github/workflows/pr.yml의 pull_request_target pwn)를 재현합니다 — 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이 등장합니다! Skim은 워크플로우를 더 빠르고 효율적으로 만들어 주도록 설계된 강력한 퍼지 파인더입니다.

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 플러그인 - Vim/Nvim 내부에서 sk를 호출합니다. Vim 지원은 skim.vim을 확인하세요.

패키지 관리자

OS패키지 관리자명령어
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 페이지: 올바른 경로에 작성하거나 `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로 파이프하세요.

interactive mode demo

셸 바인딩

Fish, Bash 및 Zsh용 바인딩은 shell 디렉터리에서 사용할 수 있습니다:

  • completion.{shell}에는 sk CLI 사용을 위한 완성 스크립트가 포함되어 있습니다.
  • key-bindings.{shell}에는 키 바인딩과 셸 통합이 포함되어 있습니다:
    • ctrl-t는 sk를 통해 파일을 선택합니다.
    • ctrl-r은 sk를 통해 기록 항목을 선택합니다.
    • alt-c는 sk를 통해 선택한 디렉터리로 cd합니다.
    • (fish에서는 사용 불가) **는 파일 경로를 완성합니다. 예를 들어 ls **<tab>은 폴더를 선택할 수 있는 sk 위젯을 표시합니다.

이 기능들을 활성화하려면 key-bindings.{shell} 파일을 소스하고 셸 문서에 따라 완성을 설정하거나 아래를 참조하세요.

셸 완성

지원되는 셸(bash, zsh, fish, powershell 또는 elvish) 중 하나와 함께 --shell 플래그를 사용하여 선호하는 셸용 완성 스크립트를 생성할 수 있습니다:

옵션 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 page (man sk)를 참조하세요.

검색 구문

skim은 항목 매칭을 위해 fzf의 구문을 차용합니다:

토큰매치 유형설명
text퍼지 매치text와 일치하는 항목
^music접두사 정확 매치music으로 시작하는 항목
.mp3$접미사 정확 매치.mp3로 끝나는 항목
'wild정확 매치 (따옴표 포함)wild를 포함하는 항목
!fire역 정확 매치fire를 포함하지 않는 항목
!.mp3$역 접미사 정확 매치.mp3로 끝나지 않는 항목

skim은 토큰의 조합도 지원합니다.

  • 공백은 AND의 의미를 갖습니다. src main이라는 용어로 skim은 src와 main 둘 다 일치하는 항목을 검색합니다.

  • |는 OR을 의미합니다 (| 주변의 공백에 유의). .md$ | .markdown$이라는 용어로 skim은 .md 또는 .markdown으로 끝나는 항목을 검색합니다.

  • OR이 더 높은 우선순위를 갖습니다. 예를 들어, readme .md$ | .markdown$은 readme AND (.md$ OR .markdown$)으로 해석됩니다.

  • --split-match 옵션을 사용할 때, 공백 또는 | 주변의 각 부분은 분할 방식으로 매칭됩니다:

    • 옵션 값(기본값은 :)이 쿼리에 없으면 일반 매칭을 수행합니다.
    • 옵션 값이 있으면, 그 앞의 모든 것을 항목의 앞부분과 매칭하고, 그 뒤의 모든 것(구분자의 다른 발생 가능성 포함)을 항목의 뒷부분과 매칭합니다. 이는 rg에서 입력을 파이프로 받아 파일 이름과 내용 모두를 매칭할 때 특히 유용합니다.

정규 표현식을 선호한다면, skim은 regex 모드를 제공합니다:```sh sk --regex

root@kitploit:~
`Ctrl-R`(Rotate Mode)를 누르면 동적으로 `regex` 모드로 전환할 수 있습니다.

## 종료 코드

| 종료 코드 | 의미                             |
|-----------|-------------------------------------|
| 0         | 정상 종료                     |
| 1         | 일치 항목 없음                      |
| 130       | Ctrl-C/Ctrl-G/ESC 등으로 중단됨... |

# `skim`과 호환되는 도구

다음 도구들은 `skim`과 호환되거나 호환을 목표로 합니다:

## [fzf-lua neovim 플러그인](https://github.com/ibhagwan/fzf-lua)

코드를 탐색하기 위해 fzf와 skim을 사용할 수 있게 해주는 [neovim](https://neovim.io) 플러그인입니다.

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 확장](https://github.com/tzachar/sqlite_skim)

SQL 쿼리에서 `skim_score` 함수를 사용할 수 있게 해주는 로드 가능한 `sqlite` 모듈입니다.

# 사용자 지정

여기 문서는 미리보기일 뿐이며, 전체 옵션 목록은 매뉴얼 페이지(`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)

색상 사용자 지정

기본 색상 구성표 뒤에 색상 값을 지정하여 개별 UI 요소를 사용자 지정할 수 있습니다.```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 16진수 값: `sk --color=fg:#FF0000` (빨간색 텍스트)

### 사용 가능한 색상 사용자 지정 옵션

다음 UI 요소를 사용자 지정할 수 있습니다:

| 요소               | 설명                                   | 예시                           |
|--------------------|----------------------------------------|--------------------------------|
| `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 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은 두 종류의 소스를 허용합니다: 명령 출력 또는 파이프된 입력
- 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은 여러 알고리즘을 제공하며, 전체 목록은 도움말 또는 manpage를 확인하세요. 그중에는 다음이 있습니다:

  • skim_v2, 기본 알고리즘으로, 대략적으로 fzf의 알고리즘에 기반함
  • frizbee, frizbee를 사용하며, blink.cmp neovim 플러그인의 오타 저항 알고리즘입니다 (x86_64 및 aarch64 전용)
  • fzy, fzy의 알고리즘을 기반으로 기본적인 오타 저항을 위해 확장됨
  • arinae, skim의 최신 알고리즘으로, 자체 설계되었으며 오타 저항을 염두에 두고 위의 모든 것을 확장하여 오타 저항 매칭을 더 자연스럽게 만들면서 항목별 성능을 최고 수준으로 유지합니다

미리보기 창

이것은 skim이 차용한 fzf의 훌륭한 기능입니다. 예를 들어, '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%`는 창을 위쪽 위치에 skim 전체 높이의 30% 높이로 배치합니다.
- `--preview-window left:10:wrap`는 `wrap`을 지정하여 미리보기 창이 미리보기 명령의 출력을 줄바꿈하도록 허용합니다.
- `--preview-window wrap:hidden`은 시작 시 미리보기 창을 숨기며, 이후 `toggle-preview` 동작으로 표시할 수 있습니다.

## 필드 지원

일반적으로 플러그인 사용자만 이해하면 되는 부분입니다.

예를 들어, 다음과 같은 형식의 데이터 소스가 있다고 가정합니다:```sh
<filename>:<line number>:<column number>

그러나 쿼리를 입력할 때 <filename>만 검색하고 싶다면 어떻게 해야 할까요. 즉, 21을 입력했을 때 21을 포함하는 <filename>을 찾되, 줄 번호나 열 번호는 매칭하지 않으려는 경우입니다.

이 경우 sk --delimiter ':' --nth 1을 사용하면 됩니다.

또한 --with-nth를 사용하여 필드의 순서를 재배열할 수도 있습니다.

범위 구문

  • <num> -- num번째 필드를 지정합니다. 1부터 시작합니다.
  • start.. -- start번째 필드부터 나머지 필드까지 지정합니다.
  • ..end -- 0번째 필드부터 end번째 필드까지 지정하며, end를 포함합니다.
  • start..end -- start번째 필드부터 end번째 필드까지 지정하며, end를 포함합니다.

라이브러리로 사용하기

Skim은 Rust 크레이트에서 라이브러리로 사용할 수 있습니다.

먼저, Cargo.toml에 skim을 추가하세요:```toml [dependencies] skim = { version = "", default-features = false, features = [..] }

root@kitploit:~
_기능 참고_:
    - `cli` 기능은 skim을 CLI로 사용할 때 필요하며, 라이브러리로 사용할 때는 *필요하지 않아야* 합니다.

### 기본 사용법

그런 다음 이 간단한 예제를 실행해 보세요:```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());
    }
}

세부 사용법

tokio와 비동기 코드를 사용하여 skim을 라이브러리로 세부적으로 사용할 수도 있으며, 이를 통해 동적으로 상호작용할 수 있습니다.

내부 동작 방식

Option<SkimItemReceiver>이 주어지면 skim은 그에 따라 항목을 읽고 작업을 수행한 후 선택된 항목, 쿼리 등을 포함한 사용자 선택 결과를 반환합니다. 참고 사항:

  • SkimItemReceiver는 crossbeam::channel::Receiver<Arc<dyn SkimItem>>입니다.
  • 값이 none이면 주어진 명령을 호출하고 명령 출력에서 항목을 읽습니다.
  • 그렇지 않으면 (crossbeam) 채널에서 항목을 읽습니다.

SkimItem 트레이트는 한 줄이 어떻게 표시되고, 비교되고, 미리보기되는지 사용자 정의하는 데 제공됩니다. 기본적으로 AsRef<str>에 대해 구현되어 있습니다.

또한 SkimItemReader는 BufRead를 SkimItemReceiver로 변환하는 헬퍼입니다(File이나 String을 쉽게 BufRead로 바꿀 수 있습니다). 따라서 문자열이나 파일을 쉽게 처리할 수 있습니다.

examples/ 디렉토리에서 더 많은 예제를 확인하세요.

벤치마크

이 벤치마크는 tmux 세션에서 대화형 인터페이스를 실행하고 UI가 안정화될 때까지 대기합니다.

benchmark graphs

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:~
You could put it in your `.bashrc` or `.zshrc` if you like it to be default.

## Some files are not shown in Vim plugin

If you use the Vim plugin and execute the `:SK` command, you may find some
of your files not shown.

As described in [#3](https://github.com/skim-rs/skim/issues/3), in the Vim
plugin, `SKIM_DEFAULT_COMMAND` is set to the command by default:```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만큼 기능이 풍부하게 유지하는 것이지만, 명령 플래그는 다를 수 있습니다.

기여 방법

버그가 발생하거나 아이디어가 있으면 새 이슈를 생성하세요. 풀 리퀘스트는 언제나 환영합니다.

Windows 호환성 테스트

GUI 없이 Windows 호환성을 테스트하기 위해 헤드리스 Windows Server 2022 Core VM을 시작하는 Vagrantfile이 포함되어 있습니다. 호스트에 VirtualBox와 Vagrant가 필요합니다(vagrant는 flake.nix를 통해 Nix 개발 셸에 포함되어 있습니다).```sh vagrant up # First boot: downloads the box and provisions (~15–20 min) ssh -p 2222 vagrant@localhost # Password: vagrant

root@kitploit:~
VM 내부에서 프로젝트 루트는 `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`을 경로로 설정할 수 있습니다. 그런 다음 실행 중이나 실행 후에 해당 로그를 읽어 상황을 더 잘 이해할 수 있습니다. 도움이 필요하면 해당 로그를 이슈에 추가하는 것을 주저하지 마세요.

## 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 또는 TERMINFO_DIRS를 설정해야 합니다.

예를 들어, termux에서는 bashrc에 다음을 추가할 수 있습니다:``` export TERMINFO=/data/data/com.termux/files/usr/share/terminfo

root@kitploit:~
# 벤치마크

## 대화형 벤치마크(`cli`)

`cli` 벤치는 tmux 세션 내에서 대화형 인터페이스를 실행하고 일치 항목 수가 안정화될 때까지 상태 줄을 폴링하여 skim(또는 호환되는 바이너리)을 다른 버전이나 fzf와 비교 측정합니다. 이는 결코 정밀하거나 완벽한 측정은 아니지만, `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에만 있으면 작동합니다.

Criterion 벤치마크

Criterion 벤치마크를 사용하여 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을 실행해야 합니다.

이 작업은 몇 분 정도 소요됩니다.

도구 다운로드