كانت واجهة الأوامر تبطئني: كيف أنقذني ‘الباحث التقريبي’ (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 وتجربة الأمثلة في هذه المقالة. أضمن لك أنها ستكون من أفضل الساعات التي استثمرتها في تطوير مهاراتك التقنية.

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

أبو عمر

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

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

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

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

آخر المدونات

​معمارية البرمجيات

ذاكرة فريقنا المعمارية قصيرة: كيف أنقذتنا ‘سجلات القرارات المعمارية’ (ADRs) من جحيم إعادة اكتشاف العجلة؟

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

29 مايو، 2026 قراءة المزيد
خوارزميات

كان التحقق من تفرد البيانات يقتل أداءنا: كيف أنقذنا ‘مرشح بلوم’ (Bloom Filter) من جحيم الاستعلامات المكلفة؟

في إحدى الليالي الطويلة والمُرهقة، كان أداء نظامنا ينهار تحت ضغط استعلامات التحقق من التفرد. في هذه المقالة، أسرد لكم كيف أنقذنا هيكل بيانات احتمالي...

29 مايو، 2026 قراءة المزيد
تسويق رقمي

كان موقعنا يخاطب الجميع ولا يخاطب أحداً: كيف أنقذنا ‘التقسيم السلوكي الديناميكي’ من جحيم التجربة العامة؟

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

29 مايو، 2026 قراءة المزيد
تجربة المستخدم والابداع البصري

عربات التسوق المهجورة: كيف أنقذنا متجرًا إلكترونيًا بـ’تأثير الطُعم’؟ قصة من قلب الميدان

رنين هاتف مفاجئ من عميل يائس، عربات تسوق مكدسة وبلا مشتريات. في هذه المقالة، أشارككم قصة حقيقية حول كيف استخدمنا خدعة نفسية بسيطة تُعرف بـ'تأثير...

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