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

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

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

قعدت نص ساعة زي الأهبل وأنا أضغط `Ctrl+R` وأكتب `docker` وأقلّب في تاريخ الأوامر اللي طوله ألف ميل. فتحت ملفات الملاحظات، دورت في محادثات الفريق… فش إشي! شعور العجز والإحباط وقتها كان قاتل. حسيت إنه ذاكرتي زي “الغربال المثقوب”، كل إشي بمرق منها. في هذيك اللحظة، قررت إنه “لهون وبس”. لازم ألاقي حل يرحمني من هالمعاناة. ومن هنا بدأت رحلتي مع الأداة اللي غيرت حياتي في الطرفية: FZF.

ما هي أداة FZF؟ البحث الضبابي في أبهى صوره

بكل بساطة، FZF هي اختصار لـ “Fuzzy Finder” أو “الباحث الضبابي”. فكر فيها كأداة بحث خارقة للطرفية. “ضبابي”؟ شو يعني؟ يعني مش لازم تكتب الكلمة بالضبط عشان تلاقيها. لو بتبحث عن ملف اسمه `docker-compose.prod.yml`، بكفي تكتب `dckr prod` و FZF راح تفهم عليك وتلاقيه فوراً.

هي مش مجرد أداة للبحث عن ملفات، بل هي فلسفة كاملة للتعامل مع أي قائمة من النصوص في الطرفية: تاريخ الأوامر، أسماء الملفات، فروع Git، العمليات (processes)، أي إشي ممكن تفكر فيه.

البداية: كيف تثبّت FZF وتُطلق العنان لسحرها؟

التثبيت أسهل من شرب المي. افتح الطرفية (Terminal) وجرّب واحد من هالأوامر حسب نظامك:

التثبيت على macOS (باستخدام Homebrew)

brew install fzf

التثبيت على Linux (باستخدام APT لـ Debian/Ubuntu)

sudo apt-get install fzf

التثبيت من المصدر (لأي نظام)

هاي الطريقة اللي بفضلها شخصياً لأنها بتضمنلك آخر نسخة:

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

بعد ما تشغّل أمر التثبيت، راح يسألك السكريبت كم سؤال. جاوب “y” (نعم) على كل الأسئلة. هاي الخطوة مهمة جداً لأنها بتفعّل التكامل التلقائي مع الـ Shell تبعك (Bash أو Zsh) وبتضيف الاختصارات السحرية زي `Ctrl+R` و `Ctrl+T`.

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

القوة الحقيقية لـ FZF: تطبيقات غيرت حياتي كمبرمج

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

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

هاي لحالها بتستاهل تثبيت الأداة. انسى الـ `Ctrl+R` التقليدية المملة. الآن، لما تضغط `Ctrl+R`، راح تفتحلك واجهة تفاعلية فيها كل تاريخ أوامرك. ابدأ اكتب أي جزء من الأمر اللي بدك إياه، وشوف كيف FZF بتفلتر النتائج فوراً.

تخيل الموقف اللي حكيتلكم عنه في البداية. بدل ما أضيّع نص ساعة، كان بكفي أضغط `Ctrl+R` وأكتب `docker my_image`، وخلال ثانية واحدة كان الأمر المعقد اللي نسيته راح يظهر قدامي. يا الله على الراحة النفسية!

البحث عن الملفات والمجلدات (Ctrl+T): أسرع من أي مدير ملفات

كم مرة كنت بدك تفتح ملف معين بس نسيت هو بأي مجلد؟ مع FZF، اضغط `Ctrl+T` في أي مكان في الطرفية. راح تفتحلك قائمة بكل الملفات والمجلدات في مسارك الحالي. اكتب جزء من اسم الملف، اضغط Enter، وراح يتم إدراجه مباشرة في سطر الأوامر.

مثال عملي: بدي أعدّل ملف الإعدادات في مشروعي.

# بدل ما أكتب المسار الطويل
vim src/config/production/settings.json

# الآن أكتب فقط:
vim 

التنقل بين المجلدات بذكاء (ALT+C): قفزة سريعة للمجلد المطلوب

هذا الاختصار مخصص لتغيير المجلدات. اضغط `Alt+C` (أو `Esc` ثم `C` إذا كان `Alt` ما بشتغل عندك) وابدأ بكتابة اسم المجلد اللي بدك تروح عليه. FZF راح يبحث في كل المجلدات الفرعية ويسمحلك تقفز مباشرة للمجلد المطلوب بضغطة زر.

التكامل مع الأوامر الأخرى: هنا يكمن السحر الحقيقي

جمال FZF الحقيقي بيظهر لما تستخدمها مع أوامر تانية باستخدام الـ “pipe” (`|`). المبدأ بسيط: أي أمر بيطلع قائمة من الأسطر، بتقدر “ترميه” على FZF عشان تختار منه بشكل تفاعلي.

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

بدك تنتقل لفرع معين بس ناسي اسمه بالضبط؟ بسيطة.

# اعرض كل الفروع، اختر واحد باستخدام fzf، ثم انتقل إليه
git branch | fzf | xargs git checkout

شرح الأمر: `git branch` بيعرض الفروع، `| fzf` بخليك تختار فرع، `| xargs git checkout` بياخد الفرع اللي اخترته وبمرره لأمر `git checkout`.

مثال 2: قتل العمليات (Processes) المزعجة

عندك عملية معلّقة وبدك توقفها؟

# اعرض كل العمليات، اختر واحدة، ثم اقتلها
ps -ef | fzf | awk '{print $2}' | xargs kill -9

شرح الأمر: `ps -ef` بيعرض العمليات، `fzf` للاختيار، `awk ‘{print $2}’` لجلب رقم العملية (PID)، و `xargs kill -9` لإرسال إشارة القتل.

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

نرجع لمثالنا الأول. لو بدي أوقف حاوية معينة:

# اعرض الحاويات الشغالة، اختر واحدة، ثم أوقفها
docker ps | fzf | awk '{print $1}' | xargs docker stop

نصائح أبو عمر الذهبية لتحقيق أقصى استفادة من FZF

بعد سنين من الاستخدام اليومي، هاي شوية أسرار ونصايح من القلب:

  • استخدم المعاينات (Previews): هاي أقوى ميزة في FZF برأيي. بتقدر تخلي FZF يعرضلك محتوى الملف اللي مؤشر عليه وأنت بتبحث! ضيف هذا السطر لملف الإعدادات تبع الـ Shell (مثل `.zshrc` أو `.bashrc`):
    export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border --preview "bat --color=always --style=numbers --line-range=:500 {}"'

    (هذا المثال بيستخدم أداة `bat` لعرض الملفات بشكل جميل. لو مش مثبتة عندك، استخدم `cat` بدالها: `–preview ‘cat {}’`)

  • ابنِ اختصاراتك الخاصة: لا تتقيد بالوضع الافتراضي. أنا مثلاً عملت دالة (function) في ملف `.zshrc` عشان أبحث في سجل Git وأنسخ الـ hash تبع الـ commit بضغطة زر.
    # دالة للبحث في سجل git log
    f_git_log() {
      git log --graph --color=always 
          --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" |
      fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort 
          --bind "ctrl-m:execute:
                    (grep -o '[a-f0-9]{7}' | head -1 |
                    xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF'
                    {}
    FZF-EOF"
    }

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

  • جرّب وخبّص: أفضل طريقة للتعلم هي التجربة. أي أمر بيخطر على بالك بيطلع قائمة؟ جرّب اعمل له `pipe` لـ `fzf`.
    ls -la | fzf
    history | fzf
    cat ~/.ssh/known_hosts | fzf

    راح تتفاجأ بكمية الأشياء اللي ممكن تعملها.

الخلاصة: ذاكرة خارجية لعقلك في الطرفية 🧠

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

نصيحتي الأخيرة إلك: لا تترك ذاكرتك تخونك مرة أخرى في أوقات حرجة. أعطِ FZF فرصة حقيقية لمدة أسبوع واحد بس. استخدمها لكل شي. أوعدك يا صاحبي، مش بس راح تدعيلي، بل راح تصير تتساءل كيف كنت عايش من دونها. يلا، شد حيلك وثبّتها الآن!

أبو عمر

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

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

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

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

آخر المدونات

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

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

قصة من الميدان عن كيفية تحويل استعلامات 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 قراءة المزيد
اختبارات الاداء والجودة

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

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

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