ذاكرتي المثقوبة وسجل الأوامر: كيف أنقذتني أداة fzf من جحيم سطر الأوامر؟

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

قبل كم ليلة، كنت قاعد بشتغل على مشروع ذكاء اصطناعي معقد شوي. الساعة كانت داخلة على ٢ بعد نص الليل، عيوني صارت تزغلل، وكاسة الشاي بالمرمية اللي جنبي فضيت للمرة الثالثة. كنت بحاول أعمل deploy لنموذج تدريبي على سيرفر بعيد، وتذكرت إني استخدمت أمر `scp` طويل عريض قبل أسبوعين، فيه اسم مستخدم غريب ومسار ملف معقد ورقم بورت مش ستاندرد.

وهون بلشت المأساة… كبسة السهم العلوي… كمان كبسة… كمان… كمان… صرت زي اللي بدور على إبرة بكومة قش. كل ما أكبس، يطلعلي أمر `ls -la` أو `git status` للمرة المليون. حسيت إني دخلت في حلقة مفرغة من الأوامر التافهة، وذاكرتي، اللي المفروض تحفظ الأوامر المهمة، صارت زي “المنخل” ما بتحفظ اشي. بعد حوالي ٥ دقايق من الكبس المتواصل والشعور بالإحباط، وقفت وقلت لحالي: “خلص! أكيد في طريقة أحسن من هيك! مش معقول كل مطورين العالم بعانوا نفس المعاناة هاي!”.

وبالفعل، كانت هاي اللحظة هي نقطة التحول في علاقتي مع الطرفية (Terminal). ومن يومها، صار عندي صديق جديد اسمه `fzf`، وهو اللي رح أحكيلكم عنه اليوم.

ما هو الجحيم الذي كنا نعيش فيه؟

كل مطور أو مدير أنظمة بيستخدم سطر الأوامر بيعرف هاي القصة. سجل الأوامر (history) هو كنز، لكن الوصول للكنز هاد كان عذاب. الطرق التقليدية كانت محدودة جداً:

  • السهم العلوي/السفلي: فعال لأمر استخدمته قبل دقيقة، لكن كارثي لأمر استخدمته قبل أسبوع.
  • `history | grep “search_term”`: طريقة كلاسيكية، لكنها بطيئة وغير تفاعلية. بتعرضلك قائمة، بعدين لازم تاخد رقم السطر وتكتب `!رقم_السطر` عشان تنفذه. مشوار طويل.
  • `Ctrl+R` (Reverse Search): الأداة المدمجة في معظم الـ shells. هي أفضل من لا شيء، لكنها بتعرض نتيجة واحدة فقط في كل مرة، وإذا كان عندك أوامر متشابهة، بتصير العملية مزعجة.

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

المنقذ `fzf`: الباحث الضبابي السحري

بكل بساطة، `fzf` هي أداة سطر أوامر تفاعلية للأغراض العامة، واسمها اختصار لـ (Fuzzy Finder) أو “الباحث الضبابي”.

شو يعني “ضبابي”؟ يعني مش محتاج تكتب الكلمة بالضبط عشان تلاقيها. بتقدر تكتب أجزاء متفرقة من اللي بتتذكره، وهو بذكاء بفلتر النتائج في الوقت الفعلي (real-time). تخيل إنك بتبحث عن الأمر اللي حكيتلكم عنه `scp -P 2222 -i ~/.ssh/id_rsa_special user@server:/path/to/model.tflite .`، كل اللي عليك تكتبه ممكن يكون `scp serv model` وهو رح يلاقيه فوراً!

تثبيت `fzf` وإعداده: خطوتان نحو الحرية

التثبيت أسهل من شرب المي. افتح الطرفية واكتب الأمر المناسب لنظامك:

# For macOS using Homebrew
brew install fzf

# For Debian/Ubuntu
sudo apt-get install fzf

# For Fedora
sudo dnf install fzf

# For Arch Linux
sudo pacman -S fzf

بعد التثبيت، لازم تشغل سكربت الإعداد عشان يربط `fzf` مع الـ shell تبعك ويفعّل الاختصارات السحرية. بس اكتب الأمر التالي في الطرفية ووافق على كل الخيارات بالضغط على `y`:

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

نصيحة من أبو عمر: بعد تشغيل سكربت الإعداد، أغلق الطرفية وافتحها من جديد (أو اعمل `source ~/.bashrc` أو `source ~/.zshrc`) عشان التغييرات تتفعل. لا تكسل بهاي الخطوة!

فك شيفرة السحر: كيف تستخدم `fzf`؟

بمجرد التثبيت، حياتك رح تتغير. انسى كل الطرق القديمة، وركز معي بهاي الاختصارات:

1. `Ctrl+R`: وداعاً للبحث العكسي التقليدي

هذا هو الاستخدام الأساسي اللي حل مشكلتي. الآن لما تضغط `Ctrl+R`، بدل ما يظهر سطر واحد بائس، رح تفتح نافذة تفاعلية فيها كل سجل الأوامر تبعك. ابدأ بكتابة أي جزء من الأمر اللي بدور عليه:

  • بدك أمر `docker`؟ اكتب `dckr`.
  • بدك أمر `git` عملت فيه `rebase`؟ اكتب `gt rbs`.
  • بدك أمر `ssh` لسيرفر معين؟ اكتب اسم السيرفر.

النتائج بتتفلتر قدام عينك بسرعة البرق. استخدم الأسهم عشان تختار الأمر اللي بدك ياه واضغط `Enter` لتنفيذه مباشرة، أو `Tab` لوضعه في سطر الأوامر للتعديل عليه.

2. `Ctrl+T`: البحث عن الملفات والمجلدات بلمح البصر

كم مرة كنت بدك تكتب مسار ملف طويل ونسيت اسمه بالضبط أو مكانه؟ الآن، بدل ما تكتب `ls` و `cd` ألف مرة، اكتب بداية الأمر (مثلاً `vim `) وبعدين اضغط `Ctrl+T`.

رح تفتح نافذة `fzf` تبحث في كل الملفات والمجلدات في المسار الحالي وتوابعه. اكتب جزء من اسم الملف (مثلاً `set py` عشان تلاقي `settings.py`) واضغط `Enter`. سيتم لصق المسار الكامل للملف في سطر الأوامر. اشي خرافي!

3. `Alt+C`: التنقل الفوري بين المجلدات

هذا الاختصار مخصص للـ `cd`. لو كنت في مجلد المشروع الرئيسي وبدك تروح على مجلد عميق مثل `src/app/api/v1/handlers`، بدل ما تكتب كل المسار، اضغط `Alt+C` (ممكن يكون `Esc+C` في بعض الطرفيات)، اكتب `hndlrs` مثلاً، واضغط `Enter`. أنت الآن في المجلد المطلوب.

المستوى المتقدم: `fzf` كأداة ربط (Piping)

هنا تكمن القوة الحقيقية لـ `fzf`. يمكنك تمرير (pipe) مخرجات أي أمر إلى `fzf` للاختيار منها بشكل تفاعلي.

مثال 1: إدارة فروع Git

بدل ما تكتب `git branch` وتنسخ اسم الفرع، جرب هذا:

# اختر فرع وانتقل إليه
git checkout $(git branch | fzf)

لكن يمكننا تحسينه. يمكن إنشاء `alias` أو دالة (function) في ملف `.zshrc` أو `.bashrc`:

# دالة لاختيار فرع git والانتقال إليه
gco() {
  local branches branch
  branches=$(git branch --all | grep -v HEAD | sed "s/.* //" | sed "s#remotes/[^/]*/##" | sort -u)
  branch=$(echo "$branches" | fzf-tmux -d 20% --prompt="Checkout > ")
  if [[ -n "$branch" ]]; then
    git checkout "$branch"
  fi
}

الآن، فقط اكتب `gco` في أي مكان، وستظهر لك قائمة تفاعلية بكل فروعك (المحلية والبعيدة) لتختار منها.

مثال 2: إيقاف العمليات (Killing Processes)

هل سئمت من البحث عن PID لعملية معينة؟

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

مثال 3: الاتصال عبر SSH

إذا كان لديك الكثير من الاتصالات في ملف `~/.ssh/config`:

# اختر Host من ملف الكونفيج واتصل به
ssh $(cat ~/.ssh/config | grep "Host " | awk '{print $2}' | fzf)

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

يا جماعة، `fzf` ليست مجرد أداة، بل هي تغيير في عقلية التعامل مع سطر الأوامر. هي تحويل العملية من “تذكُّر” إلى “بحث”. ذاكرتنا البشرية ثمينة، ولا يجب أن نضيعها في حفظ أوامر طويلة ومعقدة. دع الآلة تقوم بالعمل الشاق.

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

نصيحتي الأخيرة: لا تخف من تجربة وتخصيص أدواتك. اجعل الطرفية تعمل لصالحك، لا ضدك. يلا، شدّوا حيلكم وجربوها اليوم! 🚀

أبو عمر

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

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

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

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

آخر المدونات

البنية التحتية وإدارة السيرفرات

كنا نغرق في بحر من التنبيهات: كيف أنقذتنا ‘المراقبة القائمة على الأعراض’ مع Prometheus من جحيم الإنذارات عديمة الجدوى؟

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

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

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

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

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

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

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

30 أبريل، 2026 قراءة المزيد
خوارزميات

كانت تبعيات مهامنا كابوساً لا ينتهي: كيف أنقذنا ‘الفرز الطوبولوجي’ من جحيم التنفيذ العشوائي؟

أذكر جيداً تلك الأيام التي كانت فيها فوضى تنفيذ المهام المترابطة تهدد بإغراق مشروعنا. في هذه المقالة، أشارككم كيف كانت خوارزمية 'الفرز الطوبولوجي' هي طوق...

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