नीचे दिए गए कोड के साथ, सब कुछ उम्मीद के मुताबिक काम करता है:
जब मैं कुंजी को लिखता हूं
c
और हिट करताTAB
हूं, तो मुझे सही क्रम में उपयुक्त पूर्ति मिलती है।जब मैं कुंजी को लिखता हूं
./
और हिट करताTAB
हूं, तो मुझेexecutables
टैग के लिए पूर्णता मिलती है ।
# Always use menu selection when using unambiguous completions.
zstyle ':completion:*:*:*:*:*' menu 'select'
# Show only completions.
zstyle ':completion:*:*:*:*:*' completer _complete
# Group name becomes the name of the matching tag.
zstyle ':completion:*:*:*:*:*' group-name ''
# Configure the order of tag matching as well as their descriptions.
zstyle -e ':completion:*:*:-command-:*:*' tag-order '
reply=(
"executables:Executables:Executables
builtins:Builtins:Builtins
commands:Commands:Commands
aliases:Aliases:Aliases
functions:Functions:Functions
parameters:Variables:Variables
reserved-words:Keywords:Keywords"
)
'
# Configure the order in which completion groups will be shown.
zstyle ':completion:*:*:-command-:*:*' group-order 'Executables' 'Builtins' 'Commands' 'Aliases' 'Functions' 'Variables' 'Keywords'
# Configure the format for each group/tag description.
zstyle ':completion:*:*:*:*:descriptions' format $'%{\e[0;38;2;0;0;0;48;2;200;150;0m%} %d %{\e[0;38;2;200;150;0;48;2;0;0;0m%}%{\e[0m%}'
# Initialize completion system.
autoload -Uz compinit && compinit
हालाँकि यदि मेरे द्वारा निर्दिष्ट किए गए टैग किसी पूर्णता का उत्पादन नहीं करते हैं, तो अन्य टैग भी आज़माए जाएंगे।
यह साबित करने का सबसे आसान तरीका यह है कि functions
टैग को tag-order
शैली से बाहर रखा जाए :
zstyle -e ':completion:*:*:-command-:*:*' tag-order '
reply=(
"executables:Executables:Executables
builtins:Builtins:Builtins
commands:Commands:Commands
aliases:Aliases:Aliases
parameters:Variables:Variables
reserved-words:Keywords:Keywords"
)
'
और फिर एक अद्वितीय उपसर्ग के साथ 2 कार्य बनाएं:
function unique_prefix_A() { }
function unique_prefix_B() { }
अब जब मैं कुंजी लिखता हूं unique_prefix_
और TAB
कुंजी मारता हूं, तो functions
टैग से हटाए जाने के बाद मुझे कुछ भी देखने की उम्मीद नहीं है tag-order
।
हालांकि, क्योंकि Executables
, Builtins
, Commands
, Aliases
, Variables
और Keywords
किसी भी पूर्ण करने नहीं प्रदान की थी, zsh
होगा डिफ़ॉल्ट रूप से अन्य टैग, अर्थात् बाहर रखा गया जैसा बनाने का प्रयास functions
टैग, किसी भी पूरा होने देने की कोशिश करने के लिए।
इस वजह से, कार्यों unique_prefix_A
और unique_prefix_B
सुझाव दिया जाएगा:
मुझे यह व्यवहार पसंद नहीं है और मैं केवल उन टैगों को खोज को सीमित करना चाहता हूं जिन्हें मैंने स्पष्ट रूप से निर्दिष्ट किया है।
टैग-ऑर्डर शैली के लिए मैनुअल एक सरल समाधान बताता है:
- यदि किसी मूल्य में केवल एक हाइफ़न होता है, तो केवल अन्य मानों में निर्दिष्ट टैग उत्पन्न होते हैं। यदि निर्दिष्ट टैग किसी भी मैच को उत्पन्न करने में विफल रहते हैं तो आम तौर पर सभी टैग स्पष्ट रूप से चयनित नहीं किए जाते हैं। इसका मतलब यह है कि एक एकल मान जिसमें केवल एक हाइफ़न शामिल है वह पूर्णता बंद कर देता है।
समाधान लागू करना:
# Configure the order of tag matching as well as their descriptions.
zstyle -e ':completion:*:*:-command-:*:*' tag-order '
reply=(
"executables:Executables:Executables
builtins:Builtins:Builtins
commands:Commands:Commands
aliases:Aliases:Aliases
functions:Functions:Functions
parameters:Variables:Variables
reserved-words:Keywords:Keywords"
"-"
)
'
वर्तमान व्यवहार है:
जब मैं कुंजी को लिखता हूं
c
और हिट करताTAB
हूं, तो मुझे सही क्रम में उपयुक्त पूर्ति मिलती है।)
जब मैं कुंजी को लिखता हूं
./
और हिट करताTAB
हूं, तो मुझे कुछ नहीं मिलता है।
अब केवल executables
टैग काम क्यों नहीं कर रहा है?
मैं इसे कैसे ठीक कर सकता हूं और वांछित व्यवहार प्राप्त कर सकता हूं?
zsh 4.3.17
)। कोई भी मौका जिसे आप ./
एक फ़ोल्डर में पूरा करने की कोशिश कर रहे हैं जिसमें कोई भी निष्पादन योग्य नहीं है? क्या आप अवांछित व्यवहार का एक उदाहरण दे सकते हैं?
./
, यह सूची में कैसे होना चाहिए? executables
टैग पूर्णता के लिए जिम्मेदार है ./
या मैं गलत हूं?
zsh 5.5.1
, क्या आपको लगता है कि यह zsh
स्रोत कोड में एक प्रतिगमन हो सकता है ? दुर्भाग्य से, नहीं, निष्पादनयोग्य और निर्देशिकाएं हैं। मैंने प्रत्येक मामले के लिए छवियों के साथ प्रश्न को अपडेट किया है। अंतिम छवि स्पष्ट रूप से अवांछित व्यवहार का प्रतिनिधित्व करती है: D
./
कि सूची में नहीं है आपको कुछ भी नहीं मिलता है।