Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
gha-lab-456dd8a245 — مختبر أبحاث أمني يعيد إنتاج CVE-2026-41414 (ثغرة pull_request_target في .github/workflows/pr.yml) — لقطة من skim-rs/skim @ ca986f4، وليست نسخة متفرعة. | Kitploit
أدوات/GitHubGitHub/pvharmo2/gha-lab-456dd8a245
تحليل الثغرات الأمنيةالاستغلالأمن سلسلة التوريدالتعلم والتعليمموارد منسقة
GitHubpvharmo2/gha-lab-456dd8a245

gha-lab-456dd8a245

مختبر أبحاث أمني يعيد إنتاج CVE-2026-41414 (ثغرة pull_request_target في .github/workflows/pr.yml) — لقطة من skim-rs/skim @ ca986f4، وليست نسخة متفرعة.

عرض المستودع
1منذ 6س 33دلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

أداة بحث آلية — ليست المشروع الأصلي.

هذا المستودع عبارة عن بيئة مختبرية مؤقتة أُنشئت بواسطة نظام آلي لأطروحة ماجستير في جامعة لافال حول إعادة إنتاج ثغرات سير عمل 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 ملفًا تنفيذيًا واحدًا يُسمى sk. اعتبره بديلًا أذكى لأدوات مثل grep — بمجرد أن تجربه، ستتساءل كيف عشت بدونه!

جدول المحتويات

  • التثبيت
    • مديرو الحزم
    • يدويًا
  • الاستخدام
    • كإضافة Vim
    • كمرشّح
    • كواجهة تفاعلية
    • ارتباطات الصدفة
    • ارتباطات المفاتيح
    • صيغة البحث
    • رمز الخروج
  • أدوات متوافقة مع skim
    • إضافة fzf-lua لـ neovim
    • nu_plugin_skim
  • التخصيص
    • خريطة المفاتيح
    • معايير الفرز
    • نظام الألوان
    • متنوع
  • مواضيع متقدمة
    • الوضع التفاعلي
      • كيف يعمل؟
    • تنفيذ برامج خارجية
    • الخوارزميات
    • نافذة المعاينة
      • كيف تعمل؟
    • دعم الحقول
    • الاستخدام كمكتبة
    • المعايير
  • الأسئلة الشائعة
    • كيف أتجاهل الملفات؟
    • بعض الملفات لا تظهر في إضافة Vim
  • الاختلافات عن fzf
  • كيف تساهم
    • اختبار التوافق مع Windows
  • استكشاف الأخطاء وإصلاحها
    • مشاكل عدم وجود سطر جديد مع nix وFreeBSD وtermux

التثبيت

يحتوي مشروع skim على عدة مكونات:

  1. ملف sk التنفيذي — البرنامج الأساسي
  2. إضافة Vim/Nvim — لاستدعاء sk داخل Vim/Nvim. راجع skim.vim لدعم Vim.

مديرو الحزم

نظام التشغيلمدير الحزمالأمر
macOSHomebrewbrew install sk
macOSMacPortssudo port install skim
Alpineapkapk add skim
Archpacmanpacman -S skim
FedoraCOPRانظر أدناه
GentooPortageemerge --ask app-misc/skim
Guixguixguix install skim
VoidXBPSxbps-install -S skim
Packaging status

Fedora

تُوفَّر حزم Fedora المحدّثة عبر مستودع COPR غير رسمي يُصان بواسطة المجتمع.```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim

root@kitploit:~
## يدويًا

ينطبق أي مما يلي:

- استخدام سكربت التثبيت:
    ```sh
    # تحقق دائمًا من محتوى السكربت قبل تشغيله!
    $ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
    ```
- استخدام الملف الثنائي: ببساطة [قم بتنزيل ملف sk القابل للتنفيذ](https://github.com/skim-rs/skim/releases) مباشرة.
- التثبيت من [crates.io](https://crates.io/): `cargo install skim`
- البناء يدويًا:
    ```sh
    $ git clone --depth 1 [email protected]:skim-rs/skim.git ~/.skim
    $ cd ~/.skim
    $ cargo build --release
    $ # أضف الملف القابل للتنفيذ الناتج `target/release/sk` إلى PATH الخاص بك
    ```

ستتمكن بعد ذلك من الوصول إلى:

- صفحة الدليل (man page)، والتي يمكنك إما كتابتها إلى المسار الصحيح أو تشغيل `man --local-file <(sk --man)`
- إكمالات الصدفة (والاختصارات الاختيارية)، باستخدام `source <(sk --shell \<shell> \[--shell-bindings])`، انظر أدناه للتفاصيل

# الاستخدام

يمكن استخدام Skim إما كمرشح عام (مشابه لـ `grep`) أو كواجهة
تفاعلية لتشغيل الأوامر.

## كإضافة Vim (على neovim، راجع [fzf-lua](https://github.com/ibhagwan/fzf-lua) مع ملف تعريف skim)

عبر vim-plug (موصى به):

قم بتثبيت skim، ثم:```vim
Plug 'skim-rs/skim'

كمرشّح (As filter)

فيما يلي بعض الأمثلة لتبدأ بها:```bash

directly invoke skim

sk

Or pipe some input to it (press TAB key to select multiple items when -m is enabled)

vim $(find . -name "*.rs" | sk -m)

root@kitploit:~
يتيح لك هذا الأمر الأخير تحديد الملفات ذات الامتداد ".rs" ويفتح
تحديداتك في Vim - وهو توفير كبير للوقت للمطورين!

## كواجهة تفاعلية

يمكن لـ `skim` استدعاء أوامر أخرى ديناميكيًا. عادةً ما سترغب في
دمجه مع [grep](https://www.gnu.org/software/grep/) أو
[ack](https://github.com/petdance/ack2) أو
[ag](https://github.com/ggreer/the_silver_searcher) أو
[rg](https://github.com/BurntSushi/ripgrep) للبحث عن المحتويات في
دليل المشروع:```sh
# works with grep
sk --ansi -i -c 'grep -rI --color=always --line-number {q} .'
# works with ack
sk --ansi -i -c 'ack --color {q}'
# works with ag
sk --ansi -i -c 'ag --color {q}'
# works with rg
sk --ansi -i -c 'rg --color=always --line-number {q}'

ملاحظة: في هذه الأمثلة، سيتم توسيع {q} حرفيًا إلى استعلام الإدخال الحالي (مُحاطًا بعلامات اقتباس مفردة). هذا يعني أن هذه الأمثلة ستبحث عن سلسلة الاستعلام الدقيقة، وليس بشكل تقريبي. للبحث التقريبي، قم بتوجيه مخرجات الأمر إلى sk دون استخدام الوضع التفاعلي.

عرض توضيحي للوضع التفاعلي

روابط الصدفة

روابط لـ Fish وBash وZsh متوفرة في دليل shell:

  • completion.{shell} يحتوي على نصوص الإكمال لاستخدام sk عبر سطر الأوامر
  • key-bindings.{shell} يحتوي على اختصارات المفاتيح وتكاملات الصدفة:
    • ctrl-t لتحديد ملف عبر sk
    • ctrl-r لتحديد إدخال من السجل عبر sk
    • alt-c للانتقال إلى دليل محدد عبر sk
    • (غير متوفر في fish) ** لإكمال مسارات الملفات، على سبيل المثال ls **<tab> سيعرض أداة sk لتحديد مجلد

لتفعيل هذه الميزات، قم بتضمين ملف key-bindings.{shell} وإعداد الإكمال وفقًا لوثائق الصدفة الخاصة بك أو راجع ما يلي.

إكمال الصدفة

يمكنك إنشاء نصوص إكمال الصدفة للصدفة المفضلة لديك باستخدام علامة --shell مع إحدى الصدف المدعومة: bash، zsh، fish، powershell، أو elvish:

الخيار 1: التضمين المباشر في جلسة الصدفة الحالية```sh

For bash

source <(sk --shell bash)

For zsh

source <(sk --shell zsh)

For fish

sk --shell fish | source

root@kitploit:~
#### الخيار 2: الحفظ في ملف ليتم تحميله تلقائيًا عند بدء تشغيل الصدفة```sh
# For bash, add to ~/.bashrc
echo 'source <(sk --shell bash)' >> ~/.bashrc  # Or save to ~/.bash_completion

# For zsh, add to ~/.zshrc
sk --shell zsh > ~/.zfunc/_sk  # Create ~/.zfunc directory and add to fpath in ~/.zshrc

# For fish, add to ~/.config/fish/completions/
sk --shell fish > ~/.config/fish/completions/sk.fish

ربط المفاتيح

بعض ربطات المفاتيح شائعة الاستخدام:

المفتاحالإجراء
Enterقبول (تحديد العنصر الحالي والخروج)
ESC/Ctrl-Gإحباط
Ctrl-P/الأعلىتحريك المؤشر للأعلى
Ctrl-N/الأسفلتحريك المؤشر للأسفل
TABتبديل التحديد والتحرك للأسفل (مع -m)
Shift-TABتبديل التحديد والتحرك للأعلى (مع -m)

للحصول على قائمة كاملة بربطات المفاتيح، راجع صفحة الرجل (man sk).

صيغة البحث

يستعير skim صيغة fzf لمطابقة العناصر:

الرمزنوع المطابقةالوصف
textمطابقة ضبابيةالعناصر التي تطابق text
^musicمطابقة دقيقة بالبادئةالعناصر التي تبدأ بـ music
.mp3$مطابقة دقيقة باللاحقةالعناصر التي تنتهي بـ .mp3
'wildمطابقة دقيقة (بين علامتي اقتباس)العناصر التي تتضمن wild
!fireمطابقة دقيقة معكوسةالعناصر التي لا تتضمن fire
!.mp3$مطابقة دقيقة معكوسة باللاحقةالعناصر التي لا تنتهي بـ .mp3

يدعم skim أيضًا دمج الرموز.

  • المسافة تعني 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:~
يمكنك التبديل إلى وضع `regex` ديناميكيًا بالضغط على `Ctrl-R` (وضع التدوير).

## رمز الخروج

| رمز الخروج | المعنى                             |
|-----------|-------------------------------------|
| 0         | خرج بشكل طبيعي                     |
| 1         | لم يتم العثور على تطابق                      |
| 130       | تم الإنهاء بواسطة Ctrl-C/Ctrl-G/ESC/إلخ... |

# الأدوات المتوافقة مع `skim`

هذه الأدوات متوافقة أو تهدف إلى أن تكون متوافقة مع `skim`:

## [إضافة fzf-lua لـ neovim](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` تتيح استخدام دالة `skim_score` في استعلامات SQL.

# التخصيص

المستند هنا مجرد معاينة، يرجى مراجعة صفحة الدليل (`man sk`) للحصول على قائمة كاملة بالخيارات.

## خريطة المفاتيح

حدد الارتباطات بأزواج مفصولة بفواصل (بدون مسافات مسموحة). على سبيل المثال:```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'

بالإضافة إلى ذلك، استخدم + لدمج الإجراءات، مثل execute-silent(echo {} | pbcopy)+abort.

راجع قسم KEY BINDINGS في صفحة الدليل (man page) للحصول على التفاصيل.

معايير الفرز

هناك خمسة مفاتيح فرز للنتائج: score, index, begin, end, length. يمكنك تحديد كيفية ترتيب السجلات بواسطة sk --tiebreak score,index,-begin أو أي ترتيب آخر تريده.

نظام الألوان

ربما لديك تفضيلاتك الجمالية الخاصة! لحسن الحظ، أنت لست مقيدًا بالمظهر الافتراضي - يدعم Skim تخصيصًا شاملاً لنظام الألوان الخاص به.```sh --color=[BASE_SCHEME][,COLOR:ANSI]

root@kitploit:~
كما يحترم Skim متغير البيئة `NO_COLOR`. اضبطه على أي قيمة وسيقوم `sk` (والعديد من تطبيقات الطرفية الأخرى) بتعطيل جميع المخرجات الملونة. راجع [no-color.org](https://no-color.org/) لمزيد من التفاصيل.

### مخططات الألوان الأساسية المتاحة

يأتي Skim مع عدة مخططات ألوان مدمجة يمكنك استخدامها كنقطة انطلاق:```sh
sk --color=dark      # Default dark theme (256 colors)
sk --color=light     # Light theme (256 colors)
sk --color=16        # Simple 16-color theme
sk --color=bw        # Minimal black & white theme (no colors, just styles)
sk --color=none      # Minimal black & white theme (no colors, no styles)
sk --color=molokai   # Molokai-inspired theme (256 colors)

تخصيص الألوان

يمكنك تخصيص عناصر واجهة المستخدم الفردية عن طريق تحديد قيم الألوان بعد المخطط الأساسي:```sh sk --color=light,fg:232,bg:255,current_bg:116,info:27

root@kitploit:~
يمكن تحديد الألوان بعدة طرق:

- ألوان ANSI (0-255): `sk --color=fg:232,bg:255`
- قيم RGB السداسية: `sk --color=fg:#FF0000` (نص أحمر)

### خيارات تخصيص الألوان المتاحة

يمكن تخصيص عناصر الواجهة التالية:

| العنصر               | الوصف                                        | المثال                           |
|----------------------|----------------------------------------------|----------------------------------|
| `fg`                 | لون النص العادي الأمامي                      | `--color=fg:232`                 |
| `bg`                 | لون خلفية النص العادي                        | `--color=bg:255`                 |
| `matched`            | النص المطابق في نتائج البحث                  | `--color=matched:108`            |
| `matched_bg`         | خلفية النص المطابق                           | `--color=matched_bg:0`           |
| `current`            | لون السطر الحالي الأمامي                     | `--color=current:254`            |
| `current_bg`         | لون خلفية السطر الحالي                       | `--color=current_bg:236`         |
| `current_match`      | النص المطابق في السطر الحالي                 | `--color=current_match:151`      |
| `current_match_bg`   | خلفية النص المطابق في السطر الحالي           | `--color=current_match_bg:236`   |
| `spinner`            | لون مؤشر التقدم                              | `--color=spinner:148`            |
| `info`               | لون سطر المعلومات                            | `--color=info:144`               |
| `prompt`             | لون المطالبة                                 | `--color=prompt:110`             |
| `cursor`             | لون المؤشر                                   | `--color=cursor:161`             |
| `selected`           | لون علامة العنصر المحدد                      | `--color=selected:168`           |
| `header`             | لون نص الترويسة                              | `--color=header:109`             |
| `border`             | لون الحدود للمعاينة/التخطيط                  | `--color=border:59`              |

### أمثلة```sh
# Use light theme but change the current line background
sk --color=light,current_bg:24

# Custom theme with multiple colors
sk --color=dark,matched:#00FF00,current:#FFFFFF,current_bg:#000080

# High contrast theme
sk --color=fg:232,bg:255,matched:160,current:255,current_bg:20

لمزيد من التفاصيل، راجع صفحة الدليل (man 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 خوارزميات متعددة، راجع التعليمات أو صفحة الدليل للحصول على قائمة شاملة. من بينها:

  • 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) هو سكربت لطباعة السياق مع إعطاء اسم الملف:الأسطر:الأعمدة)

ستحصل على نتائج مثل هذه:

![معاينة تجريبية](https://assets.kitploit.com/production/public/readmes/54416/b89dd1e40297ffc3fa4684c4a6d5dc9506c0eafdb881d4cea079ff843f1a271a/84156872f39354a97241078491506fee9f9962eda6628161f94f6f36ec2c79f9-display-v1.webp)

### كيف يعمل؟

إذا تم إعطاء أمر المعاينة عبر خيار `--preview`، فسيقوم skim باستبدال
`{}` بالسطر المميز حاليًا والمحاط بعلامات اقتباس مفردة، ثم يستدعي
الأمر للحصول على المخرجات، ويطبع المخرجات في نافذة المعاينة.

أحيانًا لا تحتاج إلى السطر بأكمله لاستدعاء الأمر. في هذه الحالة
يمكنك استخدام `{}` أو `{1..}` أو `{..3}` أو `{1..5}` لتحديد الحقول. يتم
شرح الصيغة في قسم [دعم الحقول](#filds-support).

أخيرًا، قد ترغب في تكوين موضع نافذة المعاينة باستخدام `--preview-window`:
- `--preview-window up:30%` لوضع النافذة في الموضع العلوي بارتفاع
    30% من الارتفاع الكلي لـ skim.
- `--preview-window left:10:wrap` لتحديد أن `wrap` يسمح لنافذة المعاينة
    بلف مخرجات أمر المعاينة.
- `--preview-window wrap:hidden` لإخفاء نافذة المعاينة عند بدء التشغيل، ويمكن
    إظهارها لاحقًا بواسطة الإجراء `toggle-preview`.

## دعم الحقول

عادةً لا يحتاج سوى مستخدمي الإضافات إلى فهم هذا.

على سبيل المثال، لديك مصدر بيانات بالتنسيق:```sh
<filename>:<line number>:<column number>

ومع ذلك، فأنت تريد البحث عن <filename> فقط عند كتابة الاستعلامات. وهذا يعني أنه عندما تكتب 21، تريد العثور على <filename> يحتوي على 21، ولكن دون مطابقة رقم السطر أو رقم العمود.

يمكنك استخدام sk --delimiter ':' --nth 1 لتحقيق ذلك.

يمكنك أيضًا استخدام --with-nth لإعادة ترتيب ترتيب الحقول.

صيغة النطاق

  • <num> -- لتحديد الحقل رقم num، بدءًا من 1.
  • start.. -- بدءًا من الحقل رقم start وما تبقى بعده.
  • ..end -- بدءًا من الحقل رقم 0، وحتى الحقل رقم end، بما في ذلك end.
  • start..end -- بدءًا من الحقل رقم start، وحتى الحقل رقم end، بما في ذلك end.

الاستخدام كمكتبة

يمكن استخدام Skim كمكتبة في مشاريع Rust الخاصة بك.

أولاً، أضف skim إلى ملف Cargo.toml الخاص بك:```toml [dependencies] skim = { version = "", default-features = false, features = [..] }

root@kitploit:~
_ملاحظة حول الميزات_:
    - ميزة `cli` مطلوبة لاستخدام skim كأداة سطر أوامر، ويُفترض ألا تكون ضرورية عند استخدامها كمكتبة.

### الاستخدام الأساسي

ثم جرّب تشغيل هذا المثال البسيط:```rust
extern crate skim;
use skim::prelude::*;
use std::io::Cursor;

pub fn main() {
    let options = SkimOptionsBuilder::default()
        .height("50%")
        .multi(true)
        .build()
        .unwrap();

    let input = "aaaaa\nbbbb\nccc".to_string();

    // `SkimItemReader` is a helper to turn any `BufRead` into a stream of `SkimItem`
    // `SkimItem` was implemented for `AsRef<str>` by default
    let item_reader = SkimItemReader::default();
    let items = item_reader.of_bufread(Cursor::new(input));

    // `run_with` would read and show items from the stream
    let selected_items = Skim::run_with(&options, Some(items))
        .map(|out| out.selected_items)
        .unwrap_or_else(|| Vec::new());

    for item in selected_items.iter() {
        println!("{}", item.output());
    }
}

الاستخدام الدقيق

يمكنك أيضًا الحصول على استخدام دقيق لـ skim كمكتبة باستخدام tokio والكود غير المتزامن، مما يسمح لك بالتفاعل ديناميكيًا مع

آلية العمل الداخلية

عند تمرير Option<SkimItemReceiver>، سيقوم skim بقراءة العناصر وفقًا لذلك، ويؤدي مهمته ويعيد لنا اختيار المستخدم بما في ذلك العناصر المحددة، والاستعلام، وما إلى ذلك. لاحظ أن:

  • SkimItemReceiver هو crossbeam::channel::Receiver<Arc<dyn SkimItem>>
  • إذا كان لا شيء، فسيقوم باستدعاء الأمر المعطى وقراءة العناصر من مخرجات الأمر
  • بخلاف ذلك، سيقرأ العناصر من القناة (crossbeam).

يتم توفير Trait SkimItem لتخصيص كيفية عرض السطر، ومقارنته ومعاينته. وهو مطبق افتراضيًا لـ AsRef<str>

بالإضافة إلى ذلك، فإن SkimItemReader هو مساعد لتحويل BufRead إلى SkimItemReceiver (يمكننا بسهولة تحويل File أو String إلى BufRead)، حتى تتمكن من التعامل مع السلاسل أو الملفات بسهولة.

اطلع على المزيد من الأمثلة في دليل examples/.

المعايير

يقوم هذا المعيار بتشغيل الواجهة التفاعلية في جلسة tmux، وينتظر استقرار واجهة المستخدم.

رسوم بيانية للمعايير

يمكنك إنشاء الرسوم البيانية باستخدام just bench-plot أو تشغيل الوصفة يدويًا في GNU bash.

الأسئلة الشائعة

كيفية تجاهل الملفات؟

يقوم 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، لكن علامات الأوامر قد تختلف.

كيفية المساهمة

أنشئ مشكلات جديدة إذا واجهت أي أخطاء أو كانت لديك أي أفكار. طلبات السحب مرحب بها بحرارة.

اختبار التوافق مع ويندوز

تم تضمين ملف Vagrantfile لتشغيل جهاز افتراضي بدون واجهة رسومية يعمل بنظام Windows Server 2022 Core لاختبار التوافق مع ويندوز دون الحاجة إلى واجهة رسومية. يتطلب ذلك 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:~
داخل الجهاز الافتراضي، يتم تثبيت جذر المشروع في `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.

معايير 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.

ستستغرق هذه المعايير عدة دقائق.

تنزيل الأداة