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

يا جماعة الخير، السلام عليكم ورحمة الله.

أذكرها وكأنها البارحة، كانت الساعة قد تجاوزت الثانية بعد منتصف الليل في مكتبي الصغير بمدينة رام الله. كنت غارقًا حتى أذني في تصحيح خطأ برمجي (bug) “عويص” في نظام يعتمد على حاويات دوكر (Docker). المشكلة كانت أنني قبل ثلاثة أيام، أو ربما أربعة، كتبت أمرًا طويلًا ومعقدًا لتشغيل حاوية معينة مع متغيرات بيئة (environment variables) كثيرة جدًا، وهذا الأمر هو مفتاح حل المشكلة الآن.

وبدأت رحلة العذاب. ضغطتُ Ctrl+R وبدأت أكتب “docker run”، لكن النتائج كانت كثيرة ومتشابهة. لجأتُ بعدها للسلاح التقليدي: history | grep docker. يا إلهي! مئات الأوامر، معظمها لا علاقة له بما أبحث عنه. شعرت بنفسي كمن يبحث عن إبرة في كومة قش، أو كما نقول عنا في فلسطين “بدور على جمل إبرة”. بدأت أضغط على السهم العلوي في الطرفية (Terminal) بشكل جنوني، وكل ضغطة كانت تزيد من إحباطي. وقتها قلت لنفسي: “يا زلمة، لازم يكون في طريقة أحسن من هيك! هاي مش عيشة!”.

في تلك الليلة، لم أجد الأمر. لكنني وجدت شيئًا أفضل بكثير، شيئًا أنقذني من هذا الجحيم، وكان اسمه: الباحث التقريبي أو الـ “Fuzzy Finder”.

ما هو جحيم الأوامر المنسية؟

كل مطور أو مدير أنظمة يعرف هذا الشعور جيدًا. ذاكرة سطر الأوامر (command history) تتحول مع الوقت إلى مقبرة ضخمة للأوامر. أوامر مفيدة، أوامر معقدة، أوامر تستخدم مرة في السنة… كلها تُدفن تحت طبقات من الأوامر اليومية البسيطة مثل ls و cd.

المشكلة ليست في أننا ننسى، فالنسيان طبيعة بشرية. المشكلة تكمن في أدوات البحث التقليدية:

  • Ctrl+R (Reverse Search): أداة جيدة، لكنها تبحث عن تطابق متسلسل. إذا كنت لا تتذكر بداية الأمر بالضبط، فلن تفيدك كثيرًا.
  • history | grep [كلمة]: هذه الطريقة أفضل قليلًا، لكنها تظل بدائية. تعرض لك قائمة طويلة وغير تفاعلية، وعليك بعدها نسخ الأمر الذي تريده ولصقه يدويًا.

هذا الحمل المعرفي (Cognitive Load) في محاولة تذكر الصيغة الدقيقة للأوامر المعقدة (مثل git, kubectl, ffmpeg) هو مضيعة حقيقية للوقت والطاقة الذهنية التي من المفترض أن نوجهها لحل المشكلات الحقيقية.

ودخل “الباحث التقريبي” على الخط…

الباحث التقريبي، وتحديدًا أشهر أداة في هذا المجال وهي fzf، هو الحل السحري لهذه المشكلة. فكرته بسيطة وعبقرية: بدلًا من البحث عن تطابق تام، هو يبحث عن تطابق “تقريبي” أو “ضبابي” (fuzzy).

ماذا يعني ذلك؟ يعني أنك لست بحاجة لتذكر الأمر بالضبط أو ترتيب الكلمات فيه. يمكنك فقط كتابة أجزاء متفرقة من الأمر، وسيقوم fzf بعرض قائمة تفاعلية بالنتائج التي تتطابق مع هذه الأجزاء، مع ترتيب أفضل النتائج في الأعلى. كل هذا يتم في الوقت الفعلي (real-time) مع كل حرف تكتبه!

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

لنُشَمِّر عن سواعدنا: تثبيت وإعداد fzf

الكلام النظري جميل، لكن دعونا نرى “شغل مرتب” على أرض الواقع. تثبيت fzf سهل للغاية على معظم الأنظمة.

خطوات التثبيت

يمكنك تثبيته باستخدام مدير الحزم المفضل لديك:

# على macOS باستخدام Homebrew
brew install fzf

# على Debian/Ubuntu
sudo apt-get install fzf

# على Arch Linux
sudo pacman -S fzf

بعد التثبيت، قم بتشغيل سكربت الإعدادات التلقائية. هذا أهم جزء لأنه يربط fzf مع الطرفية الخاصة بك ويفعّل الميزات السحرية مثل Ctrl+R.

$(brew --prefix)/opt/fzf/install

أو إذا قمت بتثبيته من مصدر آخر، ابحث عن ملف install وقم بتشغيله. سيطلب منك تفعيل بعض الخيارات، وافق عليها جميعًا (y). بعد ذلك، أعد تشغيل الطرفية.

القوة الحقيقية لـ fzf: ما وراء البحث البسيط

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

وداعًا لـ Ctrl+R التقليدية!

هذه هي الميزة القاتلة التي ستجعلك تقع في حب fzf. الآن، عندما تضغط على Ctrl+R، بدلًا من السطر الصغير في الأسفل، ستظهر لك واجهة fzf التفاعلية تعرض سجل الأوامر بالكامل.

جربها الآن. اضغط Ctrl+R وابدأ بكتابة أجزاء من أمر استخدمته سابقًا. مثلًا، لو كنت أبحث عن أمر الـ Docker المعقد ذاك، يمكنني ببساطة أن أكتب:

docker run my-app-image

ستجد أن fzf يقوم بتصفية السجل فورًا ليظهر لك كل الأوامر التي تحتوي على هذه الكلمات الثلاث، بغض النظر عن ترتيبها أو ما بينها. تجد الأمر الذي تريده، تضغط Enter، وها هو يظهر في الطرفية جاهزًا للتنفيذ أو التعديل. سحر!

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

هل سئمت من كتابة ls ثم نسخ اسم الملف لفتحه؟ fzf يحل هذه المشكلة.

  • للبحث عن ملف وفتحه: يمكنك استخدام fzf لإيجاد ملف ثم تمرير اسمه إلى أمر آخر مثل محرر النصوص.
# سيبحث في كل الملفات والمجلدات ويعرضها في fzf
# عند اختيار ملف، سيتم طباعة اسمه
# يمكننا استخدامه لفتح الملف في vim أو أي محرر آخر
vim $(fzf)

نصيحة من أبو عمر: في إعدادات الطرفية (مثل .zshrc أو .bashrc)، يمكنك عمل اختصار لهذا. أنا شخصيًا أستخدم Ctrl+T الذي يوفره fzf تلقائيًا للبحث عن ملف ولصق مساره في سطر الأوامر الحالي.

  • للانتقال إلى مجلد: يوفر fzf اختصارًا رائعًا هو ALT+C. عند ضغطه، يفتح fzf واجهة للبحث عن المجلدات. بمجرد اختيار مجلد والضغط على Enter، ينتقل بك الأمر cd إليه مباشرة. لا مزيد من cd ../../...!

fzf واللعب مع الكبار (Git, Docker, etc.)

هنا تظهر عبقرية fzf الحقيقية: قدرته على العمل مع مخرجات أي أمر آخر. المبدأ بسيط: أي قائمة نصية يمكن تحويلها إلى قائمة تفاعلية قابلة للبحث.

أمثلة مع Git

  • الانتقال بين الفروع (Branches):
# اعرض كل الفروع، ابحث فيها بـ fzf، ثم انتقل للفرع المختار
git checkout $(git branch --all | tr -d ' *' | fzf)
  • استعراض سجل الـ Commits:
# اعرض سجل الـ commits بشكل جميل، ابحث فيه، ثم اعرض تفاصيل الـ commit المختار
git log --oneline --graph | fzf | cut -d ' ' -f 1 | xargs git show

أمثلة مع Docker

  • إيقاف حاوية معينة:
# اعرض الحاويات الشغالة، اختر واحدة، ثم أوقفها
docker stop $(docker ps | sed 1d | fzf | awk '{print $1}')

أمثلة مع العمليات (Processes)

تحذير: استخدم هذا الأمر بحذر شديد!

  • قتل عملية معينة:
# اعرض كل العمليات، ابحث فيها بـ fzf، ثم اقتل العملية المختارة
ps -ef | sed 1d | fzf | awk '{print $2}' | xargs kill -9

الأمثلة لا حصر لها. أي شيء يمكنك إخراجه كقائمة نصية، يمكنك “تَفْزِيْزُه” (من fzf-ify بالإنجليزية 😉).

نصائح من مطبخ أبو عمر

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

  1. خصّص مظهر fzf: الألوان الافتراضية قد لا تعجبك. يمكنك تخصيص كل شيء عبر متغير البيئة FZF_DEFAULT_OPTS. ضعه في ملف .zshrc أو .bashrc. هذا ما أستخدمه شخصيًا:
  2. export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border --margin=1 --padding=1'
  3. اصنع دوالك الخاصة (Functions): لا تكتفِ بكتابة الأوامر الطويلة كل مرة. حوّلها إلى دوال بسيطة في ملف إعدادات الطرفية. مثلًا، دالة للبحث في سجل Git:
  4. # دالة للبحث في سجل git
    f_git_log() {
      git log --oneline --graph | fzf | cut -d ' ' -f 1
    }
    
    # الآن يمكنك فقط كتابة f_git_log في الطرفية
  5. استخدمه داخل محرر الأكواد: متعة fzf لا تقتصر على الطرفية. هناك إضافات رائعة له في محررات مثل Vim/Neovim (تلسكوب هو الأفضل) و VS Code، مما يتيح لك البحث عن الملفات والكلمات داخل المشروع بنفس الطريقة السريعة والتقريبية.

الخلاصة: لا تترك إنتاجيتك في المقبرة

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

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

نصيحتي لك: استثمر ساعة واحدة من وقتك لتثبيت fzf وتعلم أساسياته. أعدك بأنها ستكون من أفضل الساعات التي استثمرتها في تحسين بيئة عملك. انطلق وحرر نفسك من جحيم الأوامر المنسية! 🚀

أبو عمر

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

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

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

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

آخر المدونات

صورة المقال
تجربة المستخدم والابداع البصري

كانت شاشاتنا الفارغة مقبرة للتفاعل: كيف أنقذتنا ‘الحالات الفارغة الذكية’ من جحيم ‘وماذا الآن؟’

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

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

كانت استعلاماتنا تزحف: كيف أنقذتنا فهارس قواعد البيانات من جحيم البحث البطيء؟

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

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

من جحيم الـ Polling إلى نعيم الـ Webhooks: كيف أنقذت “خطافات الويب” تطبيقاتنا من السؤال المستمر “هل من جديد؟”

أروي لكم قصة من واقع تجربتي كمبرمج، كيف انتقلنا من طريقة الاستطلاع المستمر (Polling) المرهقة للخوادم، إلى الاعتماد على "خطافات الويب" (Webhooks) الذكية. مقالة عملية...

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

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

هل ملفك الشخصي مجرد قائمة بمشاريع غير مكتملة أو تطبيقات تعليمية؟ اكتشف كيف حوّلتُ 'مقبرة المشاريع' الخاصة بي إلى قصة نجاح متماسكة باستخدام تقنية 'سردية...

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

كان خادمنا ينهار تحت الضغط: كيف أنقذنا ‘موازن الأحمال’ من جحيم نقطة الفشل الواحدة؟

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

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

كان كل سيرفر جزيرة منعزلة: كيف وحّد Ansible أسطولنا وأنقذنا من جحيم التكوينات المتضاربة؟

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

24 مايو، 2026 قراءة المزيد
ادارة الفرق والتنمية البشرية

من جحيم ‘شو الجديد؟’ إلى حوار حقيقي: كيف حوّلت اجتماعاتي الفردية (1-on-1s) من استجواب إلى استثمار في فريقي؟

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

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