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