ذاكرتي المثقوبة وسجل الأوامر: كيف أنقذتني أداة 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` سيوفر عليك مئات الساعات من الإحباط والوقت الضائع على المدى الطويل. لا تستهينوا بقوة الأدوات الصغيرة التي تجعل حياتكم أسهل.

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

أبو عمر

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

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

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

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

آخر المدونات

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

المعمارية الموجهة بالأحداث (EDA): طوق النجاة الذي أنقذنا من جحيم الخدمات المتشابكة

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

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

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

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

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

كانت صفحاتنا تُحمّل ببطء قاتل: كيف أنقذنا ‘التحميل المسبق’ (Eager Loading) من جحيم استعلامات N+1؟

أشارككم قصة حقيقية من قلب المعركة البرمجية، كيف اكتشفنا عدوًا خفيًا يسمى "N+1 Query" كان يلتهم أداء تطبيقنا، وكيف كان "التحميل المسبق" (Eager Loading) هو...

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

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

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

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