طرفيتي كانت بئرًا بلا قرار: كيف أنقذتني أدوات مثل ‘fzf’ و ‘zsh’ من جحيم البحث عن الإبرة في كومة قش؟

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

اسمحولي أحكيلكم قصة صارت معي قبل كم سنة، قصة بتلخص معاناة كثير من المبرمجين. كانت الساعة حوالي 2 بعد نص الليل، وأنا غرقان في كود مشروع ذكاء اصطناعي معقّد. فجأة، ضرب معي خطأ غريب عجيب، وأنا متأكد 100% إني حليت مشكلة مشابهة إله قبل أسابيع. الحل كان عبارة عن أمر طويل شوي، فيه `awk` و `sed` وشوية بايبات (`|`) ربطت الدنيا ببعضها.

قلت بسيطة، برجع لـ `history` وبلاقيه. وهون بلشت المأساة. قعدت أضغط على السهم العلوي في الكيبورد يمكن ألف مرة، عيوني صارت تزغلل من كثر الأوامر اللي بتمرق قدامي: `ls`, `cd`, `git commit`, `npm install`… كومة قش حقيقية. حاولت أستخدم `Ctrl+R` للبحث، بس الأمر كان معقد وأنا مش متذكر بدايته بالضبط. شعرت بإحباط ما بعده إحباط، وقلت في نفسي: “يا زلمة، معقول في 2024 لسا بنعاني هاي المعاناة؟ لازم يكون في حل أحسن!”.

هذيك الليلة كانت نقطة التحول. قررت إني لازم أستثمر وقت في تطوير بيئة العمل الأساسية تبعتي: الطرفية (Terminal). ومن يومها، حياتي كـ مطور تغيرت تمامًا. اليوم، بدي أشارككم الكنز اللي اكتشفته، وكيف حولت الطرفية من بئر بلا قرار إلى صاروخ إنتاجية بمساعدة أداتين بالذات: `zsh` و `fzf`.

الانتقال من Bash إلى Zsh: مش مجرد تغيير، ثورة!

لسنوات طويلة، كنت أستخدم شل `bash` الافتراضي الموجود في معظم أنظمة لينكس وماك. كان “يمشّي الحال”، وكنت أظن أنه هذا كل ما في الأمر. لكن لما قررت أبحث عن بدائل، كل الطرق كانت تؤدي إلى `zsh` أو (Z Shell).

ليش Zsh بالذات؟

الانتقال لـ `zsh` كان بمثابة الانتقال من سيارة قديمة إلى سيارة حديثة مليئة بالميزات. أهم الفروقات اللي حسيت فيها فورًا كانت:

  • الإكمال التلقائي الذكي (Intelligent Auto-completion): هاد إشي خرافي! في `bash`، الإكمال التلقائي محدود. في `zsh`، بتقدر تكتب `git ch` وتضغط `Tab`، رح يعطيك خيارات مثل `checkout` و `cherry-pick` مع شرح بسيط لوظيفة كل أمر. بتقدر تكمل أسماء ملفات، خيارات الأوامر (flags)، وحتى أسماء الـ hosts اللي بتتصل فيها بـ `ssh`.
  • قوة الإضافات (Plugins): هون السحر الحقيقي ببدأ، خصوصًا مع إطار عمل اسمه “Oh My Zsh”. هاد الإطار بسهّل عليك إدارة إضافات `zsh` وثيماته بشكل لا يصدق. بدك إضافات خاصة بـ `git`؟ `docker`؟ `python`؟ كبسة زر وبتكون عندك.
  • التخصيص والثيمات (Themes): الطرفية مش لازم تكون شاشة سوداء مملة. مع `zsh` وثيمات مثل `agnoster` أو `powerlevel10k`، بصير الـ prompt تبعك يعرض معلومات مفيدة جدًا بشكل تلقائي: الفرع الحالي في `git` وحالته (هل في تغييرات؟)، المسار اللي انت فيه، حالة آخر أمر تم تنفيذه، والكثير غيره.

كيف تبدأ مع Zsh و Oh My Zsh

الموضوع أبسط مما بتتخيل. أول خطوة هي تركيب `zsh` نفسه.

# على الأنظمة المبنية على Debian/Ubuntu
sudo apt update && sudo apt install zsh

# على macOS (عادة يكون مثبتًا، أو يمكن تثبيته بـ Homebrew)
brew install zsh

بعدها، عشان تخلي حياتك سهلة، ركّب “Oh My Zsh”. هو عبارة عن سكربت بسيط بتنفذه في طرفيتك:

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

هذا الأمر رح ينزل `Oh My Zsh` ويخلي `zsh` هو الشل الافتراضي عندك. رح تلاحظ فورًا إنه شكل الطرفية اختلف. كل إعداداتك رح تكون موجودة في ملف بسيط اسمه `.zshrc` في مجلد الـ home تبعك. افتحه وشوف الكنوز اللي فيه.

نصيحة أبو عمر: أول إضافتين لازم تفعلهم في ملف `.zshrc` هم `zsh-autosuggestions` و `zsh-syntax-highlighting`. الأولى بتقترح عليك تكملة الأوامر بناءً على تاريخك (بلون خفيف)، والثانية بتلون الأمر اللي بتكتبه عشان تعرف إذا في خطأ قبل ما تضغط Enter. صدقني، هدول لحالهم بغيروا حياتك.

fzf: السحر الحقيقي للبحث في كومة القش

إذا كان `zsh` هو السيارة الحديثة، فـ `fzf` هو محرك التيربو اللي بركب عليها. `fzf` هي أداة “fuzzy finder”، أو “الباحث التقريبي” إذا بدنا نترجمها. هاي الأداة حلت مشكلتي الأصلية اللي حكيتلكم عنها في البداية بشكل جذري.

ما هو الـ Fuzzy Finding؟

الفكرة بسيطة وعبقرية. بدل ما تبحث عن كلمة أو جملة “بالضبط”، أنت بتكتب أي أحرف متفرقة من الكلمة وهو بلاقيلك كل النتائج المطابقة. مثلاً، لو بدك تبحث عن ملف اسمه `project-user-authentication-service.js`، مش محتاج تكتب كل هاد. بكفي تكتب `pjas` وهو رح يفهم إنك بتقصد الحروف الأولى من كل كلمة ويقترحه عليك!

حالات استخدام غيرت حياتي مع fzf

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

1. البحث في تاريخ الأوامر (Ctrl+R)

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

2. البحث عن الملفات والمجلدات (Ctrl+T)

محتاج تفتح ملف مدفون في عشر مجلدات جوا بعض؟ بدل ما تكتب `vim src/components/auth/forms/login/…`، هلأ بس اضغط `Ctrl+T`، اكتب كم حرف من اسم الملف (`login` مثلاً)، اختاره من القائمة، ومسار الملف رح ينكتبلك في سطر الأوامر تلقائيًا. إشي ولا في الأحلام.

3. التنقل السريع بين المجلدات (Alt+C)

هاي زي السابقة لكن خاصة بالمجلدات. اضغط `Alt+C` وابدأ بكتابة اسم أي مجلد في نظامك (خصوصًا المجلدات اللي زرتها مؤخرًا)، واختاره عشان تنتقل إله (`cd`) فورًا.

التكامل المتقدم: اصنع أدواتك الخاصة!

القوة الحقيقية لـ `fzf` بتظهر لما تدمجه مع أوامر تانية باستخدام الـ pipe (`|`). هون الإبداع ما إله حدود. شوف هاي الأمثلة اللي بستخدمها يوميًا وحاططها كـ `alias` في ملف `.zshrc` عندي:

  • التبديل بين فروع git بسرعة:
    # أضف هذا السطر لملف .zshrc
    alias gb='git branch | fzf | xargs git checkout'

    الآن، بدل ما تكتب `git branch` عشان تشوف الفروع، بعدين `git checkout a-very-long-branch-name`، كل اللي عليك تعمله هو تكتب `gb` في الطرفية، رح تطلعلك قائمة بالفروع، بتختار الفرع اللي بدك ياه وبتضغط Enter. خلصنا!

  • البحث في سجل git log:
    # أضف هذا السطر لملف .zshrc
    alias gl='git log --oneline --graph --decorate | fzf'

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

  • إيقاف العمليات (Processes) بشكل تفاعلي:
    # أضف هذا السطر لملف .zshrc
    alias killit='ps -ef | fzf | awk "{print $2}" | xargs kill -9'

    هاي خطيرة شوي بس مفيدة جدًا. لو عندك عملية معلقة وبدك توقفها، بدل ما تدور على الـ PID تبعها، بس اكتب `killit`، ابحث عن اسم العملية في القائمة اللي بتظهرلك، واضغط Enter. بيتم قتلها فورًا.

تركيب fzf ودمجه مع Zsh

التركيب كمان سهل جدًا. الطريقة المفضلة عندي هي عن طريق `git`:

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

السكربت `install` ذكي جدًا. رح يسألك إذا بدك يفعّل الاختصارات السحرية (`Ctrl+R`, `Ctrl+T`, `Alt+C`) ويكتب الإعدادات اللازمة في ملف `.zshrc` أو `.bashrc` تلقائيًا. جاوبه بنعم (`y`) واستمتع.

خلاصة خبرتي: نصائح ذهبية لترويض الطرفية

بعد كل هاي السنين، تعلمت كم شغلة مهمة عن التعامل مع الطرفية:

  • لا تخف من التجربة: ملف `.zshrc` هو ملعبك الخاص. خذ نسخة احتياطية منه والعب فيه زي ما بدك. جرب إضافات جديدة، اكتب اختصاراتك (aliases) الخاصة، وغير الثيم. أسوأ إشي ممكن يصير هو إنك ترجع للنسخة الاحتياطية.
  • ابدأ بسيطًا: لا تركب 50 إضافة من أول يوم. ابدأ بـ `Oh My Zsh` مع الإضافات الأساسية اللي ذكرتها فوق، وبعدين كل ما تحس إنك محتاج شغلة معينة، ابحث عن إضافة بتعملها.
  • اصنع اختصاراتك الخاصة (Aliases): كل أمر طويل بتستخدمه بشكل متكرر، حوّله لـ `alias`. هاي الحركة الصغيرة بتوفر عليك وقت وجهد ذهني كبير على المدى الطويل.
  • الطرفية صديقتك، مش عدوتك: غير نظرتك للطرفية. هي مش مجرد شاشة سوداء بتكتب فيها أوامر. هي أقوى أداة تحت إيدك كمبرمج. كل ما استثمرت فيها وقت لتتعلمها وتخصصها، كل ما ردتلك الجميل أضعافًا مضاعفة في الإنتاجية والراحة.

الخلاصة: من بئر بلا قرار إلى صاروخ إنتاجية 🚀

الرحلة من `bash` البسيط إلى عالم `zsh` و `fzf` كانت من أفضل الاستثمارات في وقتي كمطور. المشكلة اللي واجهتني في هذيك الليلة، مشكلة البحث عن أمر في تاريخي، هلأ حلها بستغرق ثانيتين حرفيًا بفضل `Ctrl+R` مع `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 قراءة المزيد
البودكاست