मैं तुम्हें के घटक जोड़ सकते हैं लगता है कि $PWD
करने के लिए cd
इस के साथ नगण्य की आवश्यकता प्रतीत होता है, हालांकि पूरा होने सूची, _cd
; यह है, एक अनुकूलित संस्करण _cd
पहले में दिखाई देना चाहिए $fpath
।
% cd && mkdir zcomp
% cp $fpath[-1]/_cd zcomp
% fpath=(~/zcomp $fapth)
फिर ~/zcomp/_cd
एक फ़ंक्शन जोड़ने के शीर्ष पर
_our_pwd() {
_values ourpwd ${(ps:/:)PWD}
}
और फिर _alternative
लाइन जोड़ने से पहले जो विकल्प की सूची में लौटता है
...
alt=("$service-options:$service option:_cd_options" "$alt[@]")
fi
alt=(ourpwd:pwd:_our_pwd "$alt[@]")
_alternative "$alt[@]" && ret=0
return ret
...
हालांकि यह pwd
घटकों को हमेशा cd
पूर्णता में जोड़ेगा :
% cd
Users jdoe Applications/ Desktop/ Documents/ Downloads/ Library/
...
अतिरिक्त तर्क के साथ आप $PWD
घटकों को तभी जोड़ सकते हैं जब हमेशा की बजाय पहले से मौजूद दूसरा तर्क मौजूद हो।
तथापि! यह हमेशा cd
पूरा होने में गड़बड़ी करता है और इसके लिए आवश्यक है कि हम अपस्ट्रीम _cd
पूर्णता को बंदर करें । एक अन्य विकल्प दो-अर्ग द्वारा प्रदान किए गए फ़ंक्शन के लिए एक नया नाम बनाना होगा cd
, शायद कहा जाता है cdsub
, और केवल PWD
घटकों के पूरा होने के बाद दिखाई देते हैं। इसमें जोड़ें~/.zshrc
function cdsub { builtin cd "$@" }
और फिर कहीं पर रखा जाने वाला एक _cd
पूरा होने का_cdsub
रास्ता $fpath
:
#compdef cdsub
#
# Modified version of _cd from ZSH 5.3.1 with specific support for the
# `cd old new` form whereby PWD elements are provided for completion.
_cd_options() {
_arguments -s \
'-q[quiet, no output or use of hooks]' \
'-s[refuse to use paths with symlinks]' \
'(-P)-L[retain symbolic links ignoring CHASE_LINKS]' \
'(-L)-P[resolve symbolic links as CHASE_LINKS]'
}
setopt localoptions nonomatch
local expl ret=1 curarg
integer argstart=2 noopts
if (( CURRENT > 1 )); then
# if not in command position, may have options.
# Careful: -<-> is not an option.
while [[ $words[$argstart] = -* && argstart -lt CURRENT ]]; do
curarg=$words[$argstart]
[[ $curarg = -<-> ]] && break
(( argstart++ ))
[[ $curarg = -- ]] && noopts=1 && break
done
fi
if [[ CURRENT -eq $((argstart+1)) ]]; then
# cd old new: look for old in $PWD and see what can replace it
local rep
# Get possible completions using word in position 2
rep=(${~PWD/$words[$argstart]/*}~$PWD(-/))
# Now remove all the common parts of $PWD and the completions from this
rep=(${${rep#${PWD%%$words[$argstart]*}}%${PWD#*$words[$argstart]}})
(( $#rep )) && _wanted -C replacement strings expl replacement compadd -a rep
else
_values ourpwd ${(ps:/:)PWD} && ret=0
return ret
fi
cd p also <Tab>
याcd p also <left arrow x 5> <Tab>
?