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

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

بتذكر مرة، قبل كم سنة، كنت قاعد بشتغل على مشروع ذكاء اصطناعي معقد، وكان الوقت متأخر بالليل. كنت بحاجة أرجع لسطر أمر `git` معقّد شوي استخدمته قبل أسبوعين يمكن. بتذكر إنه كان فيه `rebase` مع `squash` وكم شغلة ثانية. ذاكرتي، الله وكيلكم، كانت زي اللي بدور على إبرة بكومة قش. قعدت أضغط `Ctrl+R` وأكتب `git`، وأرجع أمسح وأكتب `rebase`، وأضل أضغط على السهم لفوق زي المجنون، وسجل الأوامر (history) عندي فيه آلاف الأسطر. حسيت بإحباط شديد، وقلت في نفسي: “معقول يا أبو عمر، كل هالتكنولوجيا والخبرة، وآخرتها محبوس بذاكرتي المحدودة؟ لازم يكون فيه حل أفضل من هيك!”.

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

العدو الأول: الاعتماد على الذاكرة و Bash الافتراضي

معظمنا ببدأ رحلته مع سطر الأوامر باستخدام `bash`، وهي البيئة الافتراضية في معظم توزيعات لينكس ونسخ macOS القديمة. `bash` ممتازة وقوية، لكنها في وضعها الافتراضي، بسيطة زيادة عن اللزوم للمطور العصري.

المشكلة الأساسية كانت تكمن في نقطتين:

  • البحث العكسي (Ctrl+R): صحيح أنه مفيد، لكنه محدود. لازم تتذكر بداية الأمر بالزبط. لو كنت ناسي كلمة في الأول وبدك تبحث عن كلمة في نص الأمر، الله يعينك.
  • الإكمال التلقائي (Tab Completion): جيد، لكنه مش ذكي كفاية. بيكمل أسماء الملفات والأوامر، لكن ما عنده “حدس” يعرف إنت شو بدك تعمل.

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

الفصل الأول: Zsh – البيئة الأنيقة والذكية

أول خطوة في رحلة الخلاص كانت الانتقال من `bash` إلى `Z Shell` أو اختصارًا `zsh`. للوهلة الأولى، ممكن تحس إنه ما اختلف إشي، لكن القوة الحقيقية لـ `zsh` تكمن في قابليته للتخصيص الهائلة والنظام البيئي الضخم من الإضافات (plugins) والمظاهر (themes).

ولتسهيل المهمة، ظهر مشروع عظيم اسمه “Oh My Zsh”، وهو إطار عمل بيتكفل بكل الإعدادات المعقدة وبيمنحك نظام إضافات ومظاهر جاهز للاستخدام بضغطة زر.

شو اللي بميّز Zsh عن جد؟

بعد تثبيت `zsh` و `Oh My Zsh` (طريقة التثبيت سهلة جدا وموجودة على موقعهم الرسمي)، راح تلاحظ الفرق فورًا:

1. الإكمال التلقائي الخارق (Smarter Tab Completion)

مع `zsh`، ما بتحتاج تكتب المسار كامل. هو أذكى من هيك. مثلا، بدل ما تكتب:

cd /usr/local/bin

بتقدر تكتب بس الأحرف الأولى من كل مجلد وهو بيكمل الباقي:

cd /u/l/b[TAB]  # -> سيتحول إلى cd /usr/local/bin/

هذا الذكاء يمتد لأوامر مثل `git`. لو كتبت `git checkout `، راح يعرض لك قائمة بالفروع (branches) اللي عندك تقدر تختار منها بالأسهم.

2. الإضافات التي لا غنى عنها (Must-Have Plugins)

هنا تكمن القوة الحقيقية. فيه إضافتين بالذات بعتبرهم أساسيات لكل مطور:

  • zsh-autosuggestions: هاي الإضافة بتعمل إشي بسيط وعبقري. وأنت بتكتب الأمر، بتعرض لك اقتراح لإكماله بلون باهت، بناءً على آخر أمر مشابه استخدمته. لو عجبك الاقتراح، بس بتضغط على السهم اليمين (→) وبيكمل الأمر. هاي لحالها بتوفر وقت كتابة مهول.
  • zsh-syntax-highlighting: بتلوّن الأوامر اللي بتكتبها مباشرة في الطرفية. الأمر الصحيح بيظهر بلون أخضر، والأمر الخطأ بلون أحمر، والمسارات بلون أزرق…إلخ. هذا بيعطيك تغذية راجعة فورية لو كتبت إشي غلط قبل ما تضغط Enter حتى.

نصيحة أبو عمر: لا تبالغ في عدد الإضافات في ملف `~/.zshrc`. كل إضافة بتزيد من وقت بدء تشغيل الطرفية. ابدأ بالأساسيات اللي ذكرتها، وأضف غيرها فقط لما تحس إنك بحاجتها فعلًا.

الفصل الثاني: fzf – المنقذ من جحيم البحث اليدوي

إذا كان `zsh` هو الهيكل العظمي القوي، فإن `fzf` (Fuzzy Finder) هو العضلات والذكاء اللي بيحركه. `fzf` هي أداة سطر أوامر صغيرة وسريعة جدًا، وظيفتها الأساسية هي “البحث التقريبي” في أي قائمة نصية بتعطيها إياها.

“بحث تقريبي” يعني إنك ما بتحتاج تكتب الكلمة بالزبط أو بالترتيب. بتكتب أي أجزاء من السطر اللي بتدور عليه، وهو بيقوم بتصفية النتائج فورًا وأنت بتكتب. هاي هي القوة السحرية.

بعد تثبيت `fzf` (عبر `brew install fzf` على macOS أو مدير الحزم في لينكس)، وربطه مع `zsh`، حياتك في سطر الأوامر لن تعود كما كانت.

الاستخدامات الخارقة لـ fzf

1. وداعًا `Ctrl+R` القديم، أهلًا بالبحث الفوري في تاريخ الأوامر

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

بتذكر قصة الأمر المعقد تبع `git rebase`؟ الآن كل اللي علي أعمله هو أضغط `Ctrl+R` وأكتب `git squash` أو `rebase interactive`، وفورًا بيظهر الأمر قدامي، بضغط Enter وبيكون جاهز للتنفيذ أو التعديل. الموضوع انتقل من دقائق من الإحباط إلى ثانية واحدة من البحث الذكي.

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

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

# كنت أكتب: vim src/components/users/forms/very_long_file_name.js
# الآن أكتب: vim [Ctrl+T] -> أبحث عن "longfile" -> أضغط Enter

3. التنقل بين المجلدات بسرعة البرق بـ `Alt+C`

بدل ما تكتب `cd ../../..` مرارًا وتكرارًا، أو تكتب مسارات طويلة، اضغط `Alt+C`. `fzf` سيبحث في المجلدات اللي زرتها مؤخرًا أو المجلدات الفرعية. اكتب جزءًا من اسم المجلد الذي تريد الذهاب إليه، واضغط Enter.

ارتقِ بمستواك: دمج `fzf` مع كل شيء!

الجمال الحقيقي لـ `fzf` يظهر عندما تبدأ بدمجه مع أوامر أخرى باستخدام الأنابيب (pipes `|`).

مثال 1: إدارة عمليات النظام (Processes)

بدل استخدام `ps aux | grep ‘some_process’` ثم أخذ الـ PID وكتابة `kill PID`، يمكنك عمل هذا:

# ابحث عن العملية واقتلها بضغطة زر
ps -ef | fzf

ستظهر لك قائمة بالعمليات، ابحث عن ما تريد، وعندما تضغط Enter، يمكنك استخدام الناتج لتمريره لأمر `kill` باستخدام بعض السحر في الـ shell.

يمكنك حتى إنشاء دالة (function) في ملف `.zshrc` الخاص بك لتبسيط هذا:

# دالة للبحث عن عملية وقتلها
fkill() {
    local pid
    pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')

    if [ "x$pid" != "x" ]
    then
        echo $pid | xargs kill -${1:-9}
    fi
}

الآن، فقط اكتب `fkill` في الطرفية، اختر العملية، وداعًا!

مثال 2: التعامل مع Git

هل لديك الكثير من الفروع في Git؟ بدل `git branch` ثم `git checkout branch-name`، جرب هذا:

# دالة للبحث عن فرع والانتقال إليه
gco() {
  local branches branch
  branches=$(git branch --all | grep -v HEAD) &&
  branch=$(echo "$branches" | fzf-tmux -d 20 -- --height 30% --prompt="Checkout: " --pointer=">" --reverse) &&
  git checkout $(echo "$branch" | sed "s/.* //" | sed "s#remotes/origin/##")
}

الآن، اكتب `gco`، وستحصل على قائمة تفاعلية بكل فروعك المحلية والبعيدة لتختار منها.

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

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

ذاكرتنا البشرية رائعة في الإبداع وحل المشكلات، لكنها سيئة جدًا في تخزين آلاف الأوامر التقنية. دعونا نترك مهمة التخزين والبحث السريع للآلة، ونتفرغ نحن لما نبرع فيه: بناء أشياء عظيمة.

نصيحتي الأخيرة لك: لا تخف من التجربة. خصص ساعة أو ساعتين في عطلة نهاية الأسبوع لتثبيت هذه الأدوات واللعب بها. قد تشعر بالبطء في البداية وأنت تتعلم الاختصارات الجديدة، لكنني أضمن لك أن العائد على هذا الاستثمار سيكون هائلًا على المدى الطويل. بالتوفيق يا جماعة! 🙏

أبو عمر

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

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

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

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

آخر المدونات

ادارة الفرق والتنمية البشرية

من الخوف إلى الإبداع: كيف أنقذت “السلامة النفسية” فريقي من شلل الصمت القاتل؟

أشارككم قصة حقيقية من مسيرتي كقائد فريق تقني، حيث كان الخوف من الخطأ يشلّ أعضاء الفريق ويقتل الإبداع. سأستعرض كيف يمكن لمفهوم "السلامة النفسية" أن...

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

كانت واجهاتنا شبكة عنكبوت: كيف أنقذ نمط ‘بوابة الواجهة البرمجية’ (API Gateway) مشروعنا من الفوضى؟

واجهات المستخدم تتحدث مع عشرات الخدمات المصغرة؟ فوضى عارمة! في هذه المقالة، أسرد لكم حكايتي مع هذه المشكلة وكيف كان نمط 'بوابة الواجهة البرمجية' (API...

23 مايو، 2026 قراءة المزيد
ذكاء اصطناعي

كان بحثنا يفهم الكلمات لا المعاني: كيف أنقذتنا ‘التضمينات المتجهة’ (Vector Embeddings) من جحيم البحث الحرفي؟

بتذكر مرة كنا بنبني نظام بحث داخلي لشركة، وكان الموظف يسأل "كيف آخذ إجازة مرضية؟" والنظام ما يرجعله إشي، لأن المستند الرسمي عنوانه "سياسة الإجازات...

23 مايو، 2026 قراءة المزيد
خوارزميات

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

حكاية من أرض الواقع عن يوم كاد فيه تطبيقنا أن ينهار بسبب استعلام بسيط عن "الأماكن القريبة". اكتشفوا كيف حولت خوارزمية Geohash هذا الكابوس إلى...

23 مايو، 2026 قراءة المزيد
تسويق رقمي

كانت حملاتنا تصرخ في الفراغ: كيف أنقذت “تجزئة الجمهور بالذكاء الاصطناعي” ميزانيتنا التسويقية؟

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

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

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

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

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