প্রথমত, আপনাকে সম্পন্ন করার জন্য একটি ফাংশন সংজ্ঞায়িত করতে হবে:
_children_dirs() {
find . -type d -name "${words[CURRENT]}*" -printf "%P\n" \
| while read -r line; do
compadd -U -X "Subdirectories: " "$line"
done
compstate[insert]=menu # no expand
}
এই ফাংশনটি এখন এর সাথে সম্পূরক হিসাবে ব্যবহার করা যেতে পারে cd
:
compdef _children_dirs cd
যাইহোক, আমি মনে করি না যে শেষ কমান্ডটি ব্যবহার করা ভাল ধারণা। প্রকৃতপক্ষে, আপনার হোম ডিরেক্টরি থেকে এটি করার চেষ্টা করুন এবং আপনি কিছুক্ষণের জন্য আপনার শেলটি বন্ধ করুন ( Ctrl + c বন্ধ করতে)। একটি ভাল সমাধান এই সমাপ্তির জন্য একটি কী ক্রম বরাদ্দ করা হতে পারে এবং এটি প্রয়োজন এবং নিরাপদ যখনই এটি ব্যবহার করতে পারে:
zstyle ':completion:children-dirs:*' completer _children_dirs
zle -C children-dirs menu-complete _generic
bindkey '^Y' children-dirs
এর সাথে, Ctrl + y শিশুদের_ dirs সমাপ্তির ট্রিগার করবে ।
আরেকটি সমাধান যা আমি মনে করি ভাল, যদি আপনি অন্য কমান্ড ব্যবহার করতে প্রস্তুত হন।
function ccd { cd $1 }
compdef _children_dirs ccd
এই ব্লকটি একটি নতুন কমান্ড ccd সংজ্ঞায়িত করে যা _ _ kids_dirs_ কে সম্পূর্ণরূপে (তাই TAB দিয়ে ট্রিগার করে) ব্যবহার করে।
আপনি নাম ফিল্টার ব্যক্তিগতকৃত করতে পারেন খোঁজ সঙ্গে ফাইলের নাম কোথাও প্যাটার্ন জন্য অনুসন্ধান করতে: "*${words[CURRENT]}*"
।
সম্পাদনা: আমি zsh এর জন্য একটি প্লাগইন তৈরি করেছি ।
somedirX foo/bar/somedirY baz/somedirZ
অন্যথায়cd
কাজ করবে না।