Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/pvharmo2/gha-lab-456dd8a245
भेद्यता विश्लेषणशोषणआपूर्ति श्रृंखला सुरक्षालर्निंग और शिक्षाचयनित संसाधन
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 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 --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} में की-बाइंड्स और शेल इंटीग्रेशन शामिल हैं:
    • sk के माध्यम से फ़ाइल चुनने के लिए ctrl-t
    • sk के माध्यम से इतिहास प्रविष्टि चुनने के लिए ctrl-r
    • sk के माध्यम से चुनी गई निर्देशिका में cd करने के लिए alt-c
    • (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

की-बाइंडिंग्स

कुछ सामान्यतः उपयोग की जाने वाली की-बाइंडिंग्स:

KeyAction
Enterस्वीकार करें (वर्तमान चुनें और बाहर निकलें)
ESC/Ctrl-Gरद्द करें
Ctrl-P/Upकर्सर ऊपर ले जाएँ
Ctrl-N/Downकर्सर नीचे ले जाएँ
TABचयन टॉगल करें और नीचे जाएँ (-m के साथ)
Shift-TABचयन टॉगल करें और ऊपर जाएँ (-m के साथ)

की-बाइंडिंग्स की पूरी सूची के लिए, man पेज (man sk) देखें।

खोज सिंटैक्स

skim मिलान आइटम्स के लिए fzf का सिंटैक्स उधार लेता है:

TokenMatch typeDescription
textfuzzy-matchआइटम जो text से मेल खाते हैं
^musicprefix-exact-matchआइटम जो music से शुरू होते हैं
.mp3$suffix-exact-matchआइटम जो .mp3 पर समाप्त होते हैं
'wildexact-match (quoted)आइटम जिनमें wild शामिल है
!fireinverse-exact-matchआइटम जिनमें fire शामिल नहीं है
!.mp3$inverse-suffix-exact-matchआइटम जो .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` मोड पर स्विच कर सकते हैं।

## exit code

| Exit Code | Meaning                             |
|-----------|-------------------------------------|
| 0         | Exited normally                     |
| 1         | No Match found                      |
| 130       | Aborted by Ctrl-C/Ctrl-G/ESC/etc... |

# `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 एक्सटेंशन](https://github.com/tzachar/sqlite_skim)

एक `sqlite` लोड करने योग्य मॉड्यूल जो SQL क्वेरी में `skim_score` फ़ंक्शन को सक्षम करता है।

# अनुकूलन

यहाँ दिया गया दस्तावेज़ केवल एक पूर्वावलोकन है, विकल्पों की पूरी सूची के लिए कृपया मैन पेज (`man sk`) देखें।

## कीमैप

बाइंडिंग को कॉमा से अलग किए गए जोड़ों के रूप में निर्दिष्ट करें (कोई स्पेस की अनुमति नहीं)। उदाहरण के लिए:```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'

इसके अलावा, क्रियाओं को जोड़ने के लिए + का उपयोग करें, जैसे execute-silent(echo {} | pbcopy)+abort।

विवरण के लिए man पेज का 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 हेक्स मान: `sk --color=fg:#FF0000` (लाल टेक्स्ट)

### उपलब्ध रंग अनुकूलन विकल्प

निम्नलिखित UI तत्वों को अनुकूलित किया जा सकता है:

| Element            | Description                                 | Example                        |
|--------------------|---------------------------------------------|--------------------------------|
| `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)।

Misc

  • --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 कई एल्गोरिदम प्रदान करता है, पूरी सूची के लिए help या manpage देखें। इनमें शामिल हैं:

  • 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 कमांड `--preview` विकल्प द्वारा दी गई है, तो skim `{}` को वर्तमान हाइलाइट की गई पंक्ति से बदल देगा, जो single quotes से घिरी होती है, कमांड को कॉल करके आउटपुट प्राप्त करता है, और आउटपुट को preview विंडो पर प्रिंट करता है।

कभी-कभी आपको कमांड को लागू करने के लिए पूरी पंक्ति की आवश्यकता नहीं होती है। इस मामले में आप फ़ील्ड चुनने के लिए `{}`, `{1..}`, `{..3}` या `{1..5}` का उपयोग कर सकते हैं। सिंटैक्स को [Fields Support](#filds-support) अनुभाग में समझाया गया है।

अंत में, आप `--preview-window` के साथ preview विंडो की स्थिति कॉन्फ़िगर करना चाह सकते हैं:
- `--preview-window up:30%` विंडो को ऊपर की स्थिति में रखने के लिए, जिसकी ऊँचाई skim की कुल ऊँचाई का 30% हो।
- `--preview-window left:10:wrap` यह निर्दिष्ट करने के लिए कि `wrap` preview विंडो को preview कमांड के आउटपुट को लपेटने की अनुमति देता है।
- `--preview-window wrap:hidden` स्टार्टअप पर preview विंडो को छिपाने के लिए, बाद में इसे `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 क्रेट्स में एक लाइब्रेरी के रूप में किया जा सकता है।

सबसे पहले, अपने Cargo.toml में skim जोड़ें:```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());
    }
}

सूक्ष्म उपयोग

आप tokio और async कोड का उपयोग करके 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:~
आप इसे अपने `.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 है, लेकिन कमांड फ़्लैग भिन्न हो सकते हैं।

योगदान कैसे करें

यदि आपको कोई बग मिले या कोई विचार हो तो नई समस्याएँ बनाएँ। पुल रिक्वेस्ट का हार्दिक स्वागत है।

Windows संगतता परीक्षण

Windows संगतता का परीक्षण GUI की आवश्यकता के बिना करने के लिए एक Vagrantfile शामिल किया गया है, जो हेडलेस Windows Server 2022 Core VM चालू करता है। इसके लिए आपके होस्ट पर VirtualBox और Vagrant की आवश्यकता होती है (vagrant Nix डेव शेल में flake.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` को किसी पथ पर सेट कर सकते हैं। फिर आप निष्पादन के दौरान या बाद में बेहतर समझ के लिए उन लॉग्स को पढ़ सकते हैं। यदि आपको सहायता चाहिए तो उन लॉग्स को किसी 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 चलाएँ।

ये कई मिनट तक चलेंगे।

टूल डाउनलोड करें