كنت أبحث عن ملفاتي كالأعمى: كيف أنقذني ‘الباحث الضبابي’ (fzf) من جحيم الذاكرة المحدودة؟

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

كنت وقتها شغال على مشروع ذكاء اصطناعي معقد، من المشاريع اللي بتسحب روحك وبتخليك سهران ليل نهار. في يوم من الأيام، والموعد النهائي للتسليم على الأبواب، صار عندي خطأ غريب في الكود. كنت متأكد إني حليت مشكلة شبيهة فيه قبل أسابيع، واستخدمت وقتها أمر طويل ومعقد فيه شوية `awk` و `sed` وكمية بايبات (`|`) بتخوف. المشكلة؟ مش قادر أتذكر الأمر! ولا حتى عارف بأي ملف سجلات (log file) كنت قاعد بشتغل.

صرت زي المجنون، بقلّب في تاريخ الأوامر باستخدام `history | grep “…”`، وبفتح الملفات واحد ورا الثاني بـ `ls -la` و `find . -name “*.log”`. كل دقيقة بتمر كانت تزيد توتري، حسيت حالي كأني بدور على إبرة في كومة قش، بس وأنا أعمى. ذاكرتي، اللي كنت مفكرها ‘إشي منيح’، خانتني تماماً. وقتها صرخت بيني وبين حالي: “يا زلمة لازم يكون في طريقة أحسن من هيك!”

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

ما هو الـ ‘الباحث الضبابي’ (fzf)؟ وليش هو ‘إشي خرافي’؟

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

شو يعني ضبابية؟ يعني لو بدك ملف اسمه my_super_important_file.txt، مش مضطر تكتب اسمه كامل. بتقدر تكتب بس msif أو superfile أو أي أجزاء متفرقة من الاسم، وهو بذكاء رح يفهم قصدك ويعرضلك أفضل النتائج فوراً وبشكل تفاعلي. كل ما تكتب حرف زيادة، النتائج بتتصفى قدام عينك بلحظتها.

باختصار، fzf بحول عملية البحث من “تذكُّر” إلى “إيجاد”. وهذا فرق شاسع في عالم الإنتاجية.

يلا نركّب الأداة ونشوف العجب

أول خطوة لنبدأ السحر هي تثبيت الأداة. العملية سهلة جداً على معظم الأنظمة.

طريقة التثبيت

أنا شخصياً بفضل أثبتها من المصدر مباشرة باستخدام Git عشان أحصل على آخر نسخة:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

بعد ما تشغل هاي الأوامر، رح يسألك السكريبت إذا بدك يفعّل الاختصارات التلقائية وإكمال الأوامر. جاوب بـ `y` (نعم) وأنت مغمض. هو رح يعدّل على ملفات الإعدادات تبعتك (زي `.bashrc` أو `.zshrc`) عشان كل شي يشتغل تلقائياً.

إذا بتستخدم مدير حزم، العملية أسهل:

  • macOS (باستخدام Homebrew): brew install fzf
  • Debian/Ubuntu: sudo apt-get install fzf
  • Arch Linux: sudo pacman -S fzf

بعد التثبيت، أعد تشغيل الواجهة الطرفية (Terminal) تبعتك، وخلينا نبدأ اللعب.

الاستخدامات اللي غيّرت حياتي كمبرمج

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

البحث في تاريخ الأوامر (وداعاً لـ Ctrl+R التقليدية!)

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

مثلاً، لو بدي أمر `docker` كنت كاتبه زمان فيه كلمة `postgres`، كل اللي علي أعمله هو أضغط `Ctrl+R` وأكتب `dckr psql`، وفوراً رح تظهرلي كل الأوامر اللي بتطابق هذا البحث الضبابي. بختار الأمر اللي بدي ياه بالأسهم وبضغط Enter. ولا أسهل!

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

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

كم مرة احتجت تفتح ملف معين بس نسيت مساره الكامل؟ مع fzf، الموضوع صار تافه.

اكتب اسم أي أمر (مثلاً `vim` أو `code` أو `cat`) وبعده اضغط `Ctrl+T`. رح تفتحلك واجهة fzf بكل الملفات والمجلدات في مسارك الحالي. ابحث عن ملفك، اختاره، ورح يتم إضافته تلقائياً لسطر الأوامر.

# اكتب vim ثم اضغط Ctrl+T
vim **<-- اضغط Ctrl+T هنا**

نصيحة أبو عمر العملية: أنا طوّرت الموضوع شوي. عملت alias بسيط في ملف `.zshrc` تبعي عشان أقدر أغير المجلدات بسرعة:

# دالة fcd - للتنقل بين المجلدات باستخدام fzf
fcd() {
    local dir
    dir=$(find ${1:-.} -path '*/.*' -prune 
            -o -type d -print 2> /dev/null | fzf +m) &&
    cd "$dir"
}

الآن، بدل ما أضل أكتب `cd ../../` وأضيع، بكتب بس `fcd` في أي مكان، بختار المجلد اللي بدي أروح عليه من القائمة، وخلصنا! قفزة نوعية في التنقل.

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

قوة fzf الحقيقية بتظهر لما تدمجها مع أدوات سطر الأوامر الأخرى باستخدام الـ pipe (`|`). الإمكانيات لا نهائية!

مع Git:

أنا بستخدم Git كل يوم، و fzf خلى حياتي أسهل بمليون مرة. شوف هاي الأمثلة:

  • الانتقال بين الفروع (branches): بدل ما أكتب `git branch` بعدين `git checkout `، عملت دالة بسيطة.
# fbr - checkout git branch (with fzf)
fbr() {
  local branches branch
  branches=$(git branch -r | sed 's/origin///g' | grep -v HEAD) &&
  branch=$(echo "$branches" | fzf-tmux -d 20 -- --multi) &&
  git checkout "$branch"
}

بكتب `fbr`، بختار الفرع اللي بدي ياه من القائمة، وهو بيعمل checkout لحاله.

  • استعراض الـ commits: بدك تشوف تفاصيل commit معين؟
git log --oneline | fzf | awk '{print $1}' | xargs git show

هذا الأمر بيعرضلك كل الـ commits، بتختار واحد منهم باستخدام fzf، وهو بيعرضلك تفاصيله الكاملة.

إدارة العمليات (Processes):

بدك توقف عملية معينة بس ناسي الـ PID تبعها؟ سهلة.

# fkill - إيقاف عملية باستخدام fzf
fkill() {
    local pid
    pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')

    if [ "x$pid" != "x" ]; then
        echo "Killing process: $pid"
        echo $pid | xargs kill -9
    fi
}

بكتب `fkill`، بختار العملية اللي بدي أقتلها من القائمة، والباقي على fzf.

نصائح أبو عمر الذهبية

بعد سنين من استخدام هاي الأداة، تعلمت كم شغلة بحب أشاركها معكم:

  1. استخدم `ripgrep` لسرعة خرافية: بشكل افتراضي، fzf بيستخدم أمر `find` للبحث عن الملفات. إذا ثبتت أداة ripgrep (اللي هي بحد ذاتها أداة رهيبة)، fzf رح يستخدمها تلقائياً ورح تلاحظ فرق شاسع في سرعة البحث، خصوصاً في المشاريع الكبيرة.
  2. خصّص الألوان والشكل: بتقدر تغير شكل fzf وألوانه عشان يناسب ثيم الـ terminal تبعك. استخدم متغير البيئة `FZF_DEFAULT_OPTS`. مثلاً: export FZF_DEFAULT_OPTS='--color=bg+:#313244,bg:#1e1e2e,hl:#f9e2af --color=fg+:#cdd6f4,fg:#cdd6f4,hl+:#f9e2af'.
  3. ابنِ أدواتك الخاصة: لا تكتفِ باللي قدمته أنا. فكر في أي عملية مكررة بتعملها كل يوم، وحاول تبنيلها دالة (function) أو alias صغير باستخدام fzf. مثلاً، البحث في سجلات SSH، أو اختيار حاوية Docker لتشغيل أمر بداخلها، أو البحث في ملاحظاتك.

الخلاصة: ودّع البحث العشوائي ورحّب بالإنتاجية 🚀

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

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

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

أبو عمر

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

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

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

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

آخر المدونات

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

تحديثات قاعدة البيانات بدون توقف: كيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من جحيم التوقفات المجدولة؟

هل سئمت من إيقاف الخدمة مع كل تحديث لهيكلة قاعدة البيانات؟ أشارككم قصة حقيقية وكيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من ليالي النشر الطويلة والمُجهدة،...

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

كانت إعادة المحاولة كارثة: كيف أنقذتنا مفاتيح عدم تكرار العمليات (Idempotency Keys) من جحيم الفواتير المزدوجة؟

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

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

من التوقف التام إلى النجاة: كيف أنقذتنا استراتيجية “الضوء المرشد” (Pilot Light) يوم انقطعت السحابة؟

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

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

كانت مهمتي البرمجية للاختبار مجرد كود: كيف أنقذني توثيق القرارات من جحيم الصمت بعد المقابلة؟

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

4 يونيو، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

من الانتظار لأيام إلى الدفع في ثوانٍ: كيف أنقذتنا شبكات الدفع الفوري من جحيم التحويلات البنكية؟

أسرد لكم من واقع تجربتي كـ "أبو عمر"، كيف عانينا من بطء وتكلفة التحويلات البنكية الدولية، وكيف جاءت شبكات الدفع الفوري ومعيار ISO 20022 لتكون...

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

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

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

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

كانت تغطية الاختبارات 100% لكن الأخطاء تتسرب: كيف أنقذنا “الاختبار الطفري” من جحيم الثقة الزائفة؟

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

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