تخطَّ إلى المحتوى

Zoxide

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

أمروصف
brew install zoxideالتثبيت على macOS باستخدام Homebrew
cargo install zoxide --lockedالتثبيت من crates.io
apt install zoxideالتثبيت على Debian/Ubuntu
pacman -S zoxideالتثبيت على Arch Linux
dnf install zoxideالتثبيت على Fedora
scoop install zoxideالتثبيت على Windows باستخدام Scoop
winget install ajeetdsouza.zoxideالتثبيت على Windows باستخدام winget
nix-env -i zoxideالتثبيت على NixOS
conda install -c conda-forge zoxideالتثبيت باستخدام Conda
curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | shالتثبيت عبر سكريبت الصدفة
أمروصف
eval "$(zoxide init bash)"التهيئة لـ Bash (أضف إلى .bashrc)
eval "$(zoxide init zsh)"التهيئة لـ Zsh (أضف إلى .zshrc)
zoxide init fish | sourceالتهيئة لـ Fish (أضف إلى config.fish)
Invoke-Expression (& { (zoxide init powershell) })التهيئة لـ PowerShell
zoxide init nushell | save -f ~/.zoxide.nuالتهيئة لـ Nushell
eval "$(zoxide init elvish)"التهيئة لـ Elvish
eval (zoxide init xonsh)التهيئة لـ Xonsh
# Bash — أضف إلى ~/.bashrc
eval "$(zoxide init bash)"

# Zsh — أضف إلى ~/.zshrc
eval "$(zoxide init zsh)"

# Fish — أضف إلى ~/.config/fish/config.fish
zoxide init fish | source

# PowerShell — أضف إلى $PROFILE
Invoke-Expression (& { (zoxide init powershell | Out-String) })

# Nushell — أضف إلى env.nu
zoxide init nushell | save -f ~/.zoxide.nu
source ~/.zoxide.nu
أمروصف
z fooالانتقال إلى المجلد الأعلى تصنيفاً المطابق لـ “foo”
z foo barالانتقال إلى المجلد المطابق لكل من “foo” و “bar”
z ~/projectsالانتقال إلى مسار محدد (مثل cd)
z ..الانتقال إلى المجلد الأب
z -الانتقال إلى المجلد السابق
zالانتقال إلى المجلد الرئيسي (بدون معاملات)
ziاختيار تفاعلي باستخدام fzf
zi fooاختيار تفاعلي مع تصفية مسبقة بـ “foo”
z foo/الانتقال إلى مجلد فرعي (شرطة مائلة لاحقة)
# بعد زيارة المجلدات، يتعلمها zoxide
cd ~/projects/myapp          # تعليم zoxide عن هذا المسار
cd ~/documents/reports       # تعليم zoxide عن هذا المسار
cd /var/log/nginx            # تعليم zoxide عن هذا المسار

# لاحقاً، انتقل بمطابقات جزئية
z myapp                      # ينتقل إلى ~/projects/myapp
z reports                    # ينتقل إلى ~/documents/reports
z nginx                      # ينتقل إلى /var/log/nginx

# كلمات مفتاحية متعددة تضيّق المطابقة
z proj myapp                 # يطابق ~/projects/myapp تحديداً
z doc rep                    # يطابق ~/documents/reports
أمروصف
z projمطابقة أي مجلد يحتوي على “proj”
z proj rustمطابقة مجلد يحتوي على كل من “proj” و “rust”
z /home/user/docsاستخدام المسار المطلق مباشرة
z docs/مطابقة وتفضيل مجلد فرعي باسم “docs”
الكلمات المفتاحية تطابق مكونات المسار”proj” يطابق /home/user/projects
الكلمة المفتاحية الأخيرة يمكنها مطابقة البادئةz pr يطابق projects
الكلمات المفتاحية المتعددة تُطابق بالعامل ANDيجب أن تظهر جميعها في المسار
المطابقة غير حساسة لحالة الأحرفz PROJ يطابق projects

خوارزمية التكرار-الحداثة

Section titled “خوارزمية التكرار-الحداثة”
مفهوموصف
التكرار-الحداثة = التكرار + الحداثةنتيجة تعتمد على عدد وحداثة الزيارات
الزيارات الحديثة تحصل على نتيجة أعلىالمجلدات المزارة اليوم تحصل على نتيجة أعلى من الأسبوع الماضي
المجلدات المزارة بشكل متكرر تحتل مرتبة أعلىالاستخدام المنتظم يزيد النتيجة بمرور الوقت
النتائج تتناقص بمرور الوقتالمجلدات غير المستخدمة تفقد تصنيفها تدريجياً
قاعدة البيانات تحذف تلقائياً النتائج المنخفضةالإدخالات القديمة غير المستخدمة تُزال تلقائياً
الحد الأقصى للإدخالات يُتحكم به بـ _ZO_MAXAGEالافتراضي: 10,000 إدخال
أمروصف
ziفتح fzf مع جميع المجلدات المتتبعة
zi queryفتح fzf مع تصفية مسبقة بالاستعلام
↑ / ↓ في fzfالتنقل بين النتائج
Enter في fzfالاختيار والانتقال إلى المجلد
Escape في fzfإلغاء الاختيار
الكتابة في fzf للتصفيةتضييق النتائج أكثر
يتطلب تثبيت fzfثبّت fzf للوضع التفاعلي
Tab في fzfتبديل الاختيار (وضع الاختيار المتعدد)
# فتح الباحث الضبابي التفاعلي مع جميع المجلدات المتتبعة
zi

# تصفية مسبقة للمجلدات التي تحتوي على "project"
zi project

# تنسيق العرض في fzf يظهر النتائج:
#   3.50   /home/user/projects/myapp
#   2.10   /home/user/projects/api
#   1.20   /var/www/project-site
أمروصف
eval "$(zoxide init bash --cmd cd)"استبدال cd بـ zoxide في Bash
eval "$(zoxide init zsh --cmd cd)"استبدال cd بـ zoxide في Zsh
--cmd cd يستبدل أمر cdيجعل cd يستخدم zoxide (cd, cdi)
--cmd j ينشئ j و jiاستخدام أسماء أوامر مخصصة
الافتراضي ينشئ z و ziأوامر zoxide القياسية
أمروصف
--hook pwdتحديث قاعدة البيانات عند تغيير المجلد (الافتراضي)
--hook promptتحديث قاعدة البيانات عند كل سطر أوامر
--hook noneتعطيل التتبع التلقائي
# استبدال cd في Bash بـ zoxide
eval "$(zoxide init bash --cmd cd)"
# الآن 'cd' يستخدم zoxide، 'cdi' يفتح التفاعلي

# استخدام اسم أمر مخصص
eval "$(zoxide init zsh --cmd j)"
# الآن 'j foo' ينتقل، 'ji' يفتح التفاعلي

# الدمج مع fzf لتجربة محسنة
export _ZO_FZF_OPTS="--height 40% --reverse --border"

استعلام قاعدة البيانات

Section titled “استعلام قاعدة البيانات”
أمروصف
zoxide query fooعرض أفضل مطابقة بدون الانتقال
zoxide query foo --listعرض جميع المطابقات مع النتائج
zoxide query foo --scoreعرض المطابقات مع نتائج التكرار-الحداثة
zoxide query --allعرض قاعدة البيانات بالكامل
zoxide query --all --scoreعرض قاعدة البيانات مع النتائج
zoxide query --exclude /pathاستبعاد مسار محدد من النتائج
zoxide query --list | head -20أعلى 20 مجلد
أمروصف
zoxide add /path/to/dirإضافة مجلد يدوياً إلى قاعدة البيانات
zoxide remove /path/to/dirإزالة مجلد من قاعدة البيانات
zoxide editفتح قاعدة البيانات في $EDITOR (تفاعلي)
قاعدة البيانات مخزنة في $_ZO_DATA_DIR/db.zoموقع قاعدة البيانات الافتراضي
# التحقق مما سيطابقه zoxide
zoxide query project --list --score
# المخرجات:
#    12.00  /home/user/projects/webapp
#     8.50  /home/user/projects/api
#     3.20  /home/user/old-project

# ملء قاعدة البيانات يدوياً للأجهزة الجديدة
zoxide add ~/projects/webapp
zoxide add ~/projects/api
zoxide add ~/.config/nvim

# إزالة الإدخالات القديمة (المجلدات المحذوفة)
zoxide query --all | while read -r dir; do
  [ -d "$dir" ] || zoxide remove "$dir"
done

# تصدير قاعدة البيانات للنسخ الاحتياطي
zoxide query --all --score > zoxide-backup.txt

الاستيراد من أدوات أخرى

Section titled “الاستيراد من أدوات أخرى”
أمروصف
zoxide import --from z path/to/.zالاستيراد من قاعدة بيانات z.sh
zoxide import --from autojump path/to/autojump.txtالاستيراد من قاعدة بيانات autojump
zoxide import --merge --from z path/to/.zاستيراد مع دمج (الاحتفاظ بالإدخالات الموجودة)
zoxide import --from z --merge ~/.zاستيراد z.sh الشائع
# الترحيل من z.sh (الأكثر شيوعاً)
zoxide import --from z ~/.z

# الترحيل من autojump
zoxide import --from autojump ~/.local/share/autojump/autojump.txt

# الدمج مع قاعدة البيانات الموجودة (بدون الكتابة فوق)
zoxide import --merge --from z ~/.z

# بعد الاستيراد، تحقق
zoxide query --all --score | head -20
أمروصف
export _ZO_DATA_DIR="$HOME/.local/share/zoxide"تعيين مجلد قاعدة البيانات
export _ZO_ECHO=1طباعة المجلد المطابق قبل الانتقال
export _ZO_EXCLUDE_DIRS="/tmp/*:/private/*"استبعاد مجلدات من التتبع
export _ZO_FZF_OPTS="--height 40%"خيارات fzf مخصصة لـ zi
export _ZO_MAXAGE=10000تعيين الحد الأقصى لإدخالات قاعدة البيانات
export _ZO_RESOLVE_SYMLINKS=1حل الروابط الرمزية قبل التخزين
# ~/.bashrc أو ~/.zshrc — تكوين zoxide الكامل

# تعيين مجلد بيانات مخصص
export _ZO_DATA_DIR="$HOME/.local/share/zoxide"

# طباعة المجلد المطابق قبل الانتقال
export _ZO_ECHO=1

# استبعاد المجلدات المؤقتة ومجلدات النظام
export _ZO_EXCLUDE_DIRS="$HOME:$HOME/Downloads:/tmp/*:/private/*"

# تخصيص مظهر fzf للوضع التفاعلي
export _ZO_FZF_OPTS="
  --height 40%
  --layout reverse
  --border rounded
  --preview 'ls -la {2..}'
  --preview-window right:40%
"

# الحد الأقصى للإدخالات قبل التقليم (الافتراضي: 10000)
export _ZO_MAXAGE=10000

# حل الروابط الرمزية إلى مسارات قياسية
export _ZO_RESOLVE_SYMLINKS=1

# تهيئة zoxide (يجب أن تكون بعد التصديرات)
eval "$(zoxide init zsh)"

الإكمال التلقائي ودعم Tab

Section titled “الإكمال التلقائي ودعم Tab”
أمروصف
z <Tab>الإكمال التلقائي من المجلدات المتتبعة
z foo<Tab>إكمال المجلدات المطابقة
إكمال Bash عبر zoxide initتلقائي مع تهيئة الصدفة
إكمال Zsh عبر zoxide initتلقائي مع تهيئة الصدفة
إكمال Fish عبر zoxide initتلقائي مع تهيئة الصدفة
  1. دع zoxide يتعلم بشكل طبيعي — استخدم صدفتك بشكل عادي وسيبني zoxide قاعدة بياناته من عاداتك. لا تحاول ملء كل مجلد يدوياً.

  2. استخدم كلمتين مفتاحيتين للدقة — عندما تتطابق عدة مجلدات، أضف كلمة مفتاحية ثانية: z proj api أكثر دقة من z api وحده.

  3. استخدم الشرطة المائلة اللاحقة للمجلدات الفرعيةz foo/ يفضل المجلدات الفرعية للمجلد الحالي المسماة “foo”، بينما z foo يبحث في قاعدة البيانات بالكامل.

  4. استبدل cd للتعلم الأقصى — استخدم --cmd cd في تهيئة صدفتك حتى يغذي كل تغيير مجلد zoxide، وليس فقط عندما تتذكر استخدام z.

  5. كوّن الاستثناءات مبكراً — عيّن _ZO_EXCLUDE_DIRS لتخطي المجلدات المؤقتة ومجلدات البناء ومسارات node_modules التي تلوث النتائج.

  6. استخدم zi للانتقالات الغامضة — عندما لا تكون متأكداً من المجلد الذي سيتطابق، استخدم zi (تفاعلي) لمعاينة واختيار من المرشحين.

  7. رحّل البيانات الموجودة — إذا كنت تنتقل من z.sh أو autojump أو fasd، استورد قاعدة بياناتك بـ zoxide import للبدء بذاكرة مؤقتة دافئة.

  8. نظّف الإدخالات القديمة — أزل بشكل دوري الإدخالات للمجلدات المحذوفة باستخدام zoxide edit أو سكريبت تنظيف للحفاظ على صلة النتائج.

  9. انسخ قاعدة بياناتك احتياطياً — صدّر بـ zoxide query --all --score قبل إعادة تثبيت نظام التشغيل أو ترحيل الأجهزة.

  10. خصص مظهر fzf — عيّن _ZO_FZF_OPTS مع --preview 'ls {2..}' لعرض محتويات المجلد في المنتقي التفاعلي.