كانت واجهة الأوامر تبطئني: كيف أنقذني ‘الباحث التقريبي’ (Fuzzy Finder) من جحيم البحث عن الملفات والأوامر؟

أذكرها جيداً تلك الليلة. كانت الساعة قد تجاوزت الثانية صباحاً، وأنا غارق في الشيفرة البرمجية لمشروع معقد يعتمد على تعلم الآلة. كنت أحاول تعديل ملف إعدادات (configuration file) معين، ملف كنت قد أنشأته قبل أسابيع ونسيت اسمه ومكانه بالضبط. كل ما أذكره هو أن اسمه يحتوي على كلمة “hyper” وموجود في مكان ما داخل مجلد `src`.

بدأت رحلة العذاب. فتحت واجهة الأوامر (الـ Terminal) وبدأت بالأوامر التقليدية:

find . -name "*hyper*.yml"

لا نتائج. ربما كان امتداد الملف مختلفاً. جربت مرة أخرى:

find . -name "*hyper*"

ظهرت لي قائمة طويلة من الملفات والمجلدات، معظمها غير ذي صلة. قضيت دقائق وأنا “أبحلق” في الشاشة، أحاول تمييز الملف الصحيح. شعرت بالإحباط يتسلل إليّ. “وين راح هالملف يا زلمة؟” تمتمت لنفسي. “أكيد في طريقة أذكى من هيك!”.

في تلك اللحظة، تذكرت نصيحة من زميل لي قبل فترة، كان يتحدث عن أداة “سحرية” اسمها `fzf` تجعل البحث في الـ Terminal سريعاً وذكياً. كنت قد تجاهلت كلامه وقتها، ظناً مني أنها مجرد أداة أخرى لا داعي لها. لكن في تلك الليلة، قررت أن أعطيها فرصة. دقائق قليلة لتثبيتها، ثم كتبت أمراً بسيطاً في جذر المشروع:

find . | fzf

وفجأة، ظهرت واجهة تفاعلية تعرض كل الملفات والمجلدات. بدأت بكتابة “hyper yml” وبشكل فوري، تقلصت القائمة لتُظهر لي الملف الذي أبحث عنه: `src/config/models/hyperparameters.yml`. ضغطت Enter، وطبع لي المسار كاملاً على الشاشة. شعرت وكأنني اكتشفت قوة خارقة. في تلك اللحظة، أدركت أن علاقتي بواجهة الأوامر لن تعود كما كانت أبداً.

ما هو الباحث التقريبي (Fuzzy Finder)؟

ببساطة، الباحث التقريبي هو أداة تسمح لك بالبحث عن نص (سواء كان اسم ملف، أمر في تاريخك، سطر في كود) بطريقة “غامضة” أو “تقريبية”. لست بحاجة لكتابة الكلمة بالترتيب الصحيح أو بشكل كامل. يكفي أن تكتب بضعة حروف متفرقة من الاسم، وستقوم الأداة بفلترة النتائج بشكل فوري وذكي لتعرض لك ما تبحث عنه.

فكر فيه كشريط بحث Google الخاص بواجهة الأوامر لديك. بدلاً من الاعتماد على الذاكرة الدقيقة أو الأوامر المعقدة مثل grep و find مع كل خياراتها، أنت فقط “ترمِي” بضعة حروف، والأداة تقوم بالعمل الشاق عنك.

بطل القصة: أداة fzf

هناك عدة أدوات تقوم بهذه المهمة، لكن أشهرها وأكثرها قوة ومرونة هي fzf. هي أداة مكتوبة بلغة Go، مما يجعلها سريعة جداً، وتعمل على جميع أنظمة التشغيل (Linux, macOS, Windows). جمال fzf يكمن في بساطتها وقدرتها على الاندماج مع أي شيء تقريباً في بيئة الـ Shell.

التثبيت: أسهل مما تتوقع

تثبيت fzf بسيط للغاية. يمكنك استخدام مدير الحزم الخاص بنظامك، أو الطريقة العامة التي تعمل في كل مكان:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

سيقوم سكربت التثبيت بسؤالك إن كنت تريد تفعيل التكامل مع الـ Shell (مثل اختصارات `Ctrl+T` و `Ctrl+R`)، أنصحك بالموافقة (بالضغط على ‘y’). سيقوم تلقائياً بتعديل ملفات الإعدادات الخاصة بك (مثل .bashrc أو .zshrc).

الاستخدامات العملية التي غيرت حياتي (مع أمثلة)

الآن للجزء الممتع. كيف حوّلت هذه الأداة البسيطة سير عملي اليومي من المعاناة إلى المتعة؟

1. البحث عن الملفات: وداعاً لـ `find` و `ls -R`

هذا هو الاستخدام الأساسي والأكثر شيوعاً. بدلاً من البحث المضني عن ملف، يمكنك الآن إيجاده وفتحه في ثوانٍ.

  • البحث عن أي ملف في المجلد الحالي والمجلدات الفرعية:

    بشكل افتراضي، بعد التثبيت، يمكنك استخدام الاختصار Ctrl+T. سيعمل هذا على فتح واجهة fzf للبحث عن الملفات، وبعد اختيار الملف، سيتم لصق مساره في سطر الأوامر.

    مثلاً، لفتح ملف في محرر Vim:

    vim [ثم اضغط Ctrl+T وابحث عن ملفك]
  • طريقتي المفضلة:

    أنا شخصياً أحب أن أدمج fzf مع أمر vim مباشرة. قمت بإنشاء alias بسيط في ملف .zshrc الخاص بي:

    # ابحث عن ملف وافتحه مباشرة في nvim
    alias vf="nvim $(fzf)"

    الآن، كل ما علي فعله هو كتابة vf في أي مكان، أبحث عن الملف الذي أريده، وبمجرد الضغط على Enter، يفتح مباشرة في محرر الأكواد. “اشي خرافي” بمعنى الكلمة!

2. البحث في تاريخ الأوامر (History): `Ctrl+R` على منشطات!

هل تعاني من الضغط المتكرر على Ctrl+R للبحث عن أمر استخدمته الأسبوع الماضي؟ fzf يحل هذه المشكلة بشكل عبقري.

بعد التثبيت، سيتم استبدال سلوك Ctrl+R الافتراضي. الآن عندما تضغط على Ctrl+R، ستظهر لك قائمة تفاعلية بكل تاريخ أوامرك. ابدأ بكتابة أي جزء من الأمر الذي تبحث عنه (مثلاً “docker compose build”) وستراه أمامك فوراً.

هذه الميزة وحدها توفر عليّ دقائق لا تحصى كل يوم. لم أعد بحاجة لتذكر الأوامر الطويلة والمعقدة، فقط أجزاء منها.

3. التنقل بين المجلدات: `cd` بذكاء فائق

التنقل بين المجلدات المتداخلة يمكن أن يكون مملاً. بدلاً من كتابة cd src/components/common/buttons، ماذا لو استطعت فقط كتابة “buttons” والانتقال إليه؟

يمكنك تحقيق ذلك بسهولة عبر إضافة دالة (function) بسيطة إلى ملف إعدادات الـ Shell:

# دالة للانتقال الذكي إلى المجلدات
cdf() {
  local dir
  dir=$(find . -type d | fzf) && cd "$dir"
}

الآن، فقط اكتب cdf في الـ Terminal، ابحث عن اسم المجلد الذي تريده، واضغط Enter. سيتم نقلك إليه مباشرة. هذه الطريقة مفيدة جداً في المشاريع الكبيرة ذات الهيكلية المعقدة.

4. التكامل مع Git: البحث في الـ Commits والفروع بسهولة

كمطور، أتعامل مع Git طوال اليوم. fzf يمكنه أن يجعل تجربة Git أسرع وأكثر متعة.

  • استعراض الـ Commits بشكل تفاعلي:

    هل تريد أن ترى تفاصيل commit معين دون نسخ ولصق الـ hash؟ جرب هذا الأمر:

    git log --oneline | fzf --preview "git show {+1}"

    هذا الأمر يعرض لك قائمة مختصرة من الـ commits. أثناء تنقلك بينها، ستظهر لك نافذة معاينة (preview) تعرض تفاصيل الـ commit المحدد (git show). إنه أمر رائع لاستكشاف تاريخ المشروع.

  • الانتقال بين الفروع (Branches) بسرعة:

    يمكنك إنشاء alias بسيط للانتقال بين الفروع المحلية والبعيدة:

    # gco -> Git Checkout
    alias gco="git checkout $(git branch --all | fzf | tr -d ' *' | sed 's/remotes/origin///')"

    عندما تكتب gco، ستظهر لك قائمة بكل الفروع. اختر الفرع الذي تريده، وسيتم عمل checkout له. لا مزيد من git branch ثم نسخ اسم الفرع ثم git checkout [اسم الفرع].

نصائح من “أبو عمر” لتحقيق أقصى استفادة

بعد سنوات من استخدام هذه الأداة، إليك بعض النصائح التي تعلمتها:

  1. ابدأ بالأساسيات: لا تحاول تعلم كل شيء دفعة واحدة. ركز في البداية على استخدام Ctrl+T للبحث عن الملفات و Ctrl+R للبحث في تاريخ الأوامر. هاتان الميزتان وحدهما ستغيران الكثير.
  2. خصص fzf حسب احتياجك: يمكنك تغيير شكل ومظهر fzf عبر متغير البيئة FZF_DEFAULT_OPTS. مثلاً، أنا أفضل أن تظهر النافذة في الأسفل مع إطار:
    export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'

    ضعه في ملف .bashrc أو .zshrc ليكون دائماً.

  3. ادمج fzf مع أدواتك المفضلة: قوة fzf الحقيقية تظهر عند دمجها مع أدوات أخرى. أنصح بشدة باستخدامها مع:
    • ripgrep (rg): بديل أسرع بكثير لأمر grep و find. استخدم rg --files | fzf للبحث عن الملفات بسرعة البرق.
    • bat: بديل عصري لأمر cat مع تمييز للألوان (syntax highlighting). يمكنك استخدامه في نافذة المعاينة لجعلها أجمل وأوضح:
      fzf --preview "bat --color=always {}"
  4. لا تخف من كتابة الـ “Aliases” والدوال الخاصة بك: “ما تستحي تكتب الـ alias اللي بريّحك”. إذا وجدت نفسك تكرر أمراً معقداً يدمج fzf، حوّله إلى alias أو دالة. هذا هو جوهر الإنتاجية.

الخلاصة: استثمر في أدواتك 🚀

في عالم البرمجة، الوقت هو أثمن ما نملك. الأدوات مثل fzf ليست مجرد رفاهية، بل هي استثمار مباشر في إنتاجيتنا وراحتنا النفسية. لقد حولت هذه الأداة علاقتي بواجهة الأوامر من علاقة صراع إلى علاقة صداقة ومتعة.

نصيحتي الأخيرة لك: لا تؤجل تعلم أداة جديدة قد توفر عليك وقتاً وجهداً. خصص ساعة من وقتك لتثبيت fzf وتجربة الأمثلة في هذه المقالة. أضمن لك أنها ستكون من أفضل الساعات التي استثمرتها في تطوير مهاراتك التقنية.

تذكر يا صديقي، كل ثانية توفرها هي ثانية يمكنك استثمارها في حل المشاكل الحقيقية وبناء أشياء عظيمة. فلتكن أدواتك عوناً لك، لا عبئاً عليك.

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

برمجة وقواعد بيانات

تحديثات قاعدة البيانات بدون توقف: كيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من جحيم التوقفات المجدولة؟

هل سئمت من إيقاف الخدمة مع كل تحديث لهيكلة قاعدة البيانات؟ أشارككم قصة حقيقية وكيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من ليالي النشر الطويلة والمُجهدة،...

4 يونيو، 2026 قراءة المزيد
الشبكات والـ APIs

كانت إعادة المحاولة كارثة: كيف أنقذتنا مفاتيح عدم تكرار العمليات (Idempotency Keys) من جحيم الفواتير المزدوجة؟

أشارككم قصة حقيقية من الخنادق البرمجية، يوم كاد خطأ بسيط في إعادة محاولة طلبات الدفع أن يكلفنا سمعتنا وأموال عملائنا. اكتشفوا معنا كيف كانت مفاتيح...

4 يونيو، 2026 قراءة المزيد
الحوسبة السحابية

من التوقف التام إلى النجاة: كيف أنقذتنا استراتيجية “الضوء المرشد” (Pilot Light) يوم انقطعت السحابة؟

أتذكر ذلك اليوم جيدًا، فنجان القهوة الصباحي، وصوت تنبيهات المراقبة يصرخ كأنه يوم القيامة. كانت منطقة سحابية كاملة قد توقفت عن العمل، لكن بفضل استراتيجية...

4 يونيو، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

كانت مهمتي البرمجية للاختبار مجرد كود: كيف أنقذني توثيق القرارات من جحيم الصمت بعد المقابلة؟

أشارككم قصة حقيقية من بداياتي، وكيف تعلمت بالطريقة الصعبة أن المهمة البرمجية ليست مجرد كتابة كود، بل هي فرصة لإظهار طريقة تفكيرك. اكتشف كيف يمكن...

4 يونيو، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

من الانتظار لأيام إلى الدفع في ثوانٍ: كيف أنقذتنا شبكات الدفع الفوري من جحيم التحويلات البنكية؟

أسرد لكم من واقع تجربتي كـ "أبو عمر"، كيف عانينا من بطء وتكلفة التحويلات البنكية الدولية، وكيف جاءت شبكات الدفع الفوري ومعيار ISO 20022 لتكون...

4 يونيو، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

كان كل خادم لدينا ‘ندفة ثلج’ فريدة: كيف أنقذنا ‘الكود كبنية تحتية’ (IaC) من جحيم الانجراف اليدوي؟

في هذه المقالة، أشارككم قصة حقيقية من قلب المعركة التقنية مع "خوادم ندفات الثلج" الفوضوية. سنغوص في مفهوم "الكود كبنية تحتية" (IaC) وكيف أن أدوات...

4 يونيو، 2026 قراءة المزيد
اختبارات الاداء والجودة

كانت تغطية الاختبارات 100% لكن الأخطاء تتسرب: كيف أنقذنا “الاختبار الطفري” من جحيم الثقة الزائفة؟

كنا نظن أن تغطية الاختبار بنسبة 100% هي درعنا الواقي، لكن الأخطاء كانت تتسلل إلى الإنتاج كاللصوص في ليل بهيم. اكتشف كيف أنقذنا "الاختبار الطفري"...

4 يونيو، 2026 قراءة المزيد
البودكاست