كانت ذاكرتنا هي أملنا الوحيد: كيف أنقذنا ‘الباحث الضبابي’ (Fuzzy Finder) من جحيم البحث في سجل الأوامر؟

قبل عدة سنوات، كنت غارقاً في أحد المشاريع المعقدة. كان يوم جمعة، والقهوة لم تعد تجدي نفعاً، وأنا أحاول نشر تحديث طارئ على خوادم الإنتاج. أتذكر جيداً أنني استخدمت أمراً معقداً في `docker` قبل أسابيع، أمر يحتوي على ربط لمنافذ معينة، وربط لمجلدات محلية، مع تمرير متغيرات بيئة… باختصار، “خلطة” طويلة عريضة من الصعب تذكرها.

بدأت رحلة العذاب المعتادة. السهم العلوي… كمان مرة… كمان مرة… لا، هذا أمر مختلف. طيب، لنجرب `history | grep ‘docker’`. ظهرت أمامي قائمة طويلة من الأوامر، معظمها لا علاقة له بما أبحث عنه. شعرت بالإحباط يتسلل إليّ، ولسان حالي يقول: “يا زلمة، معقول ما في طريقة أسهل من هيك؟ معقول كل خبرتي هاي ولساتني بعاني من شغلة بسيطة زي هاي؟”. في تلك اللحظة، كانت ذاكرتي هي أملي الوحيد، وللأسف، كانت ذاكرتي تخونني.

هذه الحادثة، وغيرها الكثير، كانت الشرارة التي دفعتني للبحث عن حل جذري. لم أكن أبحث عن أداة، بل عن راحة بال. كنت أبحث عن طريقة تجعلني أركز على حل المشكلة، لا على تذكر صيغة الأمر. وهنا كان لقائي الأول مع ما يسمى بـ “الباحث الضبابي” (Fuzzy Finder)، وتحديداً أداة غيّرت علاقتي بالطرفية إلى الأبد: `fzf`.

ما هو الباحث الضبابي (Fuzzy Finder)؟ وليش بنحتاجه؟

لنبسّط الأمور. محركات البحث التقليدية (مثل `grep` أو البحث في محرر النصوص `Ctrl+F`) تبحث عن تطابق تام أو نمط محدد. إذا كتبت “start” فهي تبحث عن كلمة “start” بالضبط.

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

على سبيل المثال، للبحث عن الأمر `docker-compose up –build`، بدلًا من كتابة الجملة كاملة، يمكنك كتابة `dcupb`، وسيقوم الباحث الضبابي بإظهار الأمر المطلوب فورًا. هذا هو سحر “الضبابية”: أنت تعطيها تلميحاً، وهي تفهم ما تقصده.

لقاءنا الأول مع البطل: أداة `fzf`

`fzf` هي أداة سطر أوامر (CLI) مفتوحة المصدر، تعتبر أشهر وأقوى تطبيق لمفهوم الباحث الضبابي. جمالها يكمن في سرعتها الفائقة وقابليتها للتكامل مع أي شيء تقريباً في بيئة يونكس/لينكس.

تثبيت `fzf` (خطوة بخطوة)

التثبيت بسيط جداً على معظم الأنظمة. إليك الطريقة:

  • على macOS باستخدام Homebrew:
    brew install fzf
  • على Linux (Debian/Ubuntu) باستخدام apt:
    sudo apt-get install fzf
  • على Linux (Fedora/CentOS) باستخدام dnf:
    sudo dnf install fzf

خطوة مهمة جداً: بعد التثبيت، يجب أن تقوم بتشغيل السكريبت المرفق لربط `fzf` مع الـ shell الخاص بك (مثل bash أو zsh) وتفعيل الاختصارات السحرية. فقط قم بتشغيل هذا الأمر وأجب بـ ‘y’ على كل الأسئلة:

$(brew --prefix)/opt/fzf/install # لمستخدمي Homebrew على macOS
/usr/share/fzf/install # لمستخدمي apt على Linux (قد يختلف المسار)

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

من النظرية للتطبيق: كيف غيّر `fzf` حياتي اليومية؟

هون بتبين القوة الحقيقية. `fzf` ليست مجرد أداة، بل هي “سكين سويسري” للطرفية. إليك بعض الأمثلة العملية من استخدامي اليومي.

استرجاع الأوامر السابقة (وداعاً لـ `Ctrl+R`)

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

الآن، عندما أريد البحث عن أمر `docker` المعقد ذاك، كل ما أفعله هو الضغط على `Ctrl+R` ثم أبدأ بكتابة أي شيء أتذكره من الأمر، مثلاً `dock port var`. وفي لمح البصر، تتقلص قائمة الأوامر الطويلة لتظهر لي فقط الأوامر التي تطابق بحثي “الضبابي”. أختار الأمر الذي أريده وأضغط `Enter`، وها هو يظهر في الطرفية جاهزاً للتنفيذ أو التعديل.

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

البحث عن الملفات والمجلدات (أسرع من `find` و `ls`)

`fzf` يأتي مع اختصارات مفيدة أخرى جاهزة للاستخدام:

  • `Alt+C` (أو `Option+C` على Mac): هذا الاختصار يفتح `fzf` للبحث عن المجلدات. بمجرد اختيار مجلد، ينتقل بك مباشرة إليه (`cd`). تخيل أنك في مجلد `~` وتريد الانتقال إلى `/var/www/my-project/src/components`. بدلًا من كتابة المسار الطويل، فقط اضغط `Alt+C` واكتب `proj comp`، وسيظهر لك المسار فوراً.
  • `Ctrl+T`: هذا الاختصار يفتح `fzf` للبحث عن أي ملف أو مجلد بدءاً من المسار الحالي. بعد اختيار الملف، يتم إدراجه في سطر الأوامر الحالي. هذا مفيد جداً عندما تريد تحرير ملف معين. بدلًا من كتابة `vim src/some/very/long/path/to/file.js`، يمكنك كتابة `vim ` ثم الضغط على `Ctrl+T` والبحث عن `filejs` واختياره.

التكامل مع أدوات أخرى (هون القوة الحقيقية)

جمال `fzf` يكمن في أنه يتبع فلسفة يونكس: “افعل شيئًا واحدًا وأتقنه”. هو يقرأ من المدخلات القياسية (stdin) ويكتب للمخرجات القياسية (stdout). هذا يعني أنه يمكنك دمجه مع أي أداة أخرى باستخدام الأنابيب (`|`).

مثال 1: التعامل مع Git

هل تريد استعراض سجل `git` بشكل تفاعلي والعودة إلى commit معين؟ ضع هذه الدالة في ملف `~/.bashrc` أو `~/.zshrc`:

# دالة للبحث في سجل git واختيار commit معين
gco_interactive() {
  git log --oneline --all | fzf --preview "git show {1}" | awk '{print $1}' | xargs git checkout
}

الآن، فقط اكتب `gco_interactive` في الطرفية. ستفتح واجهة `fzf` تعرض لك كل الـ commits، وعندما تتنقل بينها، سترى تفاصيل كل commit في نافذة المعاينة. بمجرد أن تضغط `Enter`، سيتم عمل `checkout` لذلك الـ commit. مذهل، أليس كذلك؟

مثال 2: إدارة حاويات Docker

هل تريد إيقاف حاوية Docker تعمل حالياً ولكنك لا تتذكر اسمها أو الـ ID بالضبط؟

# أمر لإيقاف حاوية Docker بشكل تفاعلي
docker ps | fzf -m | awk '{print $1}' | xargs -r docker stop

هذا الأمر يعرض لك الحاويات التي تعمل، يمررها إلى `fzf`، ثم يمكنك اختيار حاوية (أو عدة حاويات باستخدام `-m`) وإيقافها.

مثال 3: قتل العمليات (Processes)

بدلاً من استخدام `ps aux | grep ‘process_name’` ثم `kill PID`، يمكنك فعل هذا:

# أمر لقتل عملية بشكل تفاعلي
ps -ef | fzf -m | awk '{print $2}' | xargs -r kill -9

نصيحة عملية: لا تكتفِ بالأساسيات. فكر في أي عملية متكررة تقوم بها وتحتاج فيها للاختيار من قائمة (ملفات، commits، حاويات، عمليات، سجلات)، وستجد أن `fzf` غالباً هو الحل الأنيق والسريع.

الخلاصة: ذاكرة خارقة لكل مطور 🧠

في عالمنا الذي يتطلب منا تذكر مئات الأوامر والإعدادات والتفاصيل الصغيرة، تأتي أدوات مثل `fzf` لتكون بمثابة ذاكرة خارجية خارقة. هي لا تجعلك أسرع فحسب، بل تقلل من العبء الذهني (Cognitive Load) وتجعل تجربة العمل على الطرفية أكثر متعة وإنتاجية.

لقد تحولت من شخص كان يخشى نسيان الأوامر ويعتمد على ذاكرته المتقلبة، إلى شخص يثق بأن أي شيء يحتاجه على بعد بضع ضغطات “ضبابية” من أصابعه. `fzf` لم تكن مجرد أداة، بل كانت تغييراً في العقلية: من “يجب أن أتذكر” إلى “يمكنني أن أجد”.

نصيحتي الأخيرة لك: في عالم البرمجة، أفضل أداة هي التي تجعلك تنسى وجودها لأنها أصبحت جزءاً لا يتجزأ منك. `fzf` هي هذه الأداة بالنسبة لي. جرّبها اليوم، وبوعدك رح تدعيلي. 👍

أبو عمر

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

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

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

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

آخر المدونات

اختبارات الاداء والجودة

كانت تغطية اختباراتنا 100% لكنها وهمية: كيف أنقذنا ‘الاختبار الطفري’ (Mutation Testing) من جحيم الثقة الزائفة؟

كنا نظن أن تغطية اختبارات بنسبة 100% هي درعنا الحصين، حتى كشف لنا "الاختبار الطفري" (Mutation Testing) عن ثغرات قاتلة في جودة اختباراتنا. هذه قصتي...

4 مايو، 2026 قراءة المزيد
أتمتة العمليات

كانت سجلات التغيير تُكتب بالدموع: كيف أنقذتنا ‘الالتزامات التقليدية’ من جحيم كتابة ملاحظات الإصدار؟

تعبت من قضاء ساعات في كتابة سجلات التغيير يدويًا؟ يشارك أبو عمر قصة من قلب المعاناة وكيف حولت 'الالتزامات التقليدية' (Conventional Commits) الفوضى إلى نظام...

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

كان كل تغيير في البيانات مغامرة: كيف أنقذتنا ‘اللامتغيرية’ (Immutability) من جحيم الآثار الجانبية؟

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

4 مايو، 2026 قراءة المزيد
ذكاء اصطناعي

كان بحثنا أعمى عن المعنى: كيف أنقذت قواعد بيانات المتجهات (Vector Databases) أنظمتنا من جحيم البحث الحرفي؟

أشارككم قصة من قلب المعاناة مع أنظمة البحث التقليدية، وكيف كانت قواعد بيانات المتجهات (Vector Databases) والبحث الدلالي هي طوق النجاة. هذه المقالة ليست مجرد...

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

كانت رسائلنا تضيع في الزحام: كيف أنقذت ‘التجزئة التنبؤية’ بالذكاء الاصطناعي حملاتنا من جحيم التخمين؟

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

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

كان كل زر قصة مختلفة: كيف أنقذ “نظام التصميم” (Design System) مشاريعنا من فوضى الواجهات؟

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

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