"टैग-ऑर्डर" शैली में "- (हाइफ़न)" मान को "टैग-ऑर्डर" टैग से रोकने से क्यों रोकता है, भले ही वह टैग स्पष्ट रूप से निर्दिष्ट हो?


4

नीचे दिए गए कोड के साथ, सब कुछ उम्मीद के मुताबिक काम करता है:

  • जब मैं कुंजी को लिखता हूं 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टैग काम क्यों नहीं कर रहा है?

मैं इसे कैसे ठीक कर सकता हूं और वांछित व्यवहार प्राप्त कर सकता हूं?


मैं पाठ को समझता हूं "यदि किसी मूल्य में केवल एक हाइफ़न होता है, तो केवल अन्य मानों में निर्दिष्ट टैग उत्पन्न होते हैं" का अर्थ है कि हाइफ़न आपको सूची में मानों के लिए प्रतिबंधित करता है। जैसा ./कि सूची में नहीं है आपको कुछ भी नहीं मिलता है।
१ry:

मैंने आपके कोड का उपयोग करने की कोशिश की, लेकिन आपकी समस्या को दोहराने के लिए प्रतीत नहीं हो सका (साथ में zsh 4.3.17)। कोई भी मौका जिसे आप ./एक फ़ोल्डर में पूरा करने की कोशिश कर रहे हैं जिसमें कोई भी निष्पादन योग्य नहीं है? क्या आप अवांछित व्यवहार का एक उदाहरण दे सकते हैं?
JRI

@harrymc हाँ, मैं इसे भी ऐसे ही समझता हूँ। हालाँकि मुझे आपकी बात समझ में नहीं आई ./, यह सूची में कैसे होना चाहिए? executablesटैग पूर्णता के लिए जिम्मेदार है ./या मैं गलत हूं?
इस्कुस्तो

@JRI यह अजीब है। मैं उपयोग कर रहा हूं zsh 5.5.1, क्या आपको लगता है कि यह zshस्रोत कोड में एक प्रतिगमन हो सकता है ? दुर्भाग्य से, नहीं, निष्पादनयोग्य और निर्देशिकाएं हैं। मैंने प्रत्येक मामले के लिए छवियों के साथ प्रश्न को अपडेट किया है। अंतिम छवि स्पष्ट रूप से अवांछित व्यवहार का प्रतिनिधित्व करती है: D
Iskustvo

@JRI और Iskustvo: आप कौन से लिनक्स संस्करण पर हैं? JRI: क्या आपने ठीक वैसी ही आज्ञा दी है जैसी बिना परिवर्धन के?
harrymc

जवाबों:


2

executableटैग का आह्वान _files -g '*(-*)इस मामले में। फिर _filesअधिक कॉल करता है _tags, इसलिए पूर्ण कार्यों में इन निहित निर्दिष्ट टैग को भी निर्दिष्ट करना आवश्यक होगा ।

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
            globbed-files directories"
           "-"
          )
'

यह जोड़ना globbed-filesऔर directoriesइस मामले में उपयोगी होगा :

% ls -al
total 80
drwxr-xr-x  3 t    t     4096 May 18 08:27 .
drwxrwxrwt 16 root root 69632 May 18 15:27 ..
drwxr-xr-x  2 t    t     4096 May 18 08:27 directory
-rwxr-xr-x  1 t    t        0 May 18 08:27 executable-file
-rw-r--r--  1 t    t        0 May 18 08:27 test
% ./<TAB>
Executables
directory/        executable-file*

लेकिन उपरोक्त सेटिंग पर, निर्देशिका और स्थानीय निष्पादन योग्य फाइलें समान "निष्पादन योग्य" समूह में जाएंगी। यदि हम "निर्देशिका" को अन्य समूहों में जाना चाहते हैं, तो हम file-patternsसीधे निर्दिष्ट कर सकते हैं और इसे इस तरह उपयोग कर सकते हैं :

zstyle ':completion:*:*:-command-:*:*' file-patterns \
 '*(#q-*):executables:Executables *(-/):directories:Directories'

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
            directories:Directories"
            -
          )
'

नीचे दिए गए उदाहरण में, "निर्देशिका" और "निष्पादन योग्य फ़ाइल" अलग-अलग समूहों में हैं:

% ls -al
total 80
drwxr-xr-x  3 t    t     4096 May 18 08:27 .
drwxrwxrwt 15 root root 69632 May 18 15:24 ..
drwxr-xr-x  2 t    t     4096 May 18 08:27 directory
-rwxr-xr-x  1 t    t        0 May 18 08:27 executable-file
-rw-r--r--  1 t    t        0 May 18 08:27 test
% ./<TAB>
Executables
executable-file*
Directories
directory/

नीचे परिणामी सबसे छोटा है .zshrc उदाहरण:

autoload -Uz compinit && compinit
zstyle ':completion:*:*:*:*:*' group-name ''
zstyle ':completion:*:descriptions' format '%B%F{black}%d%f%b'
zstyle ':completion:*:*:*:*:*' menu 'select'

# This comment out block is just for a reminder of my answer's first half.
# 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
#                       globbed-files directories"
#                    "-"
#                   )
# '

zstyle ':completion:*:*:-command-:*:*' file-patterns \
 '*(#q-*):executables:Executables *(-/):directories:Directories'

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
            directories:Directories"
            -
          )
'

अपडेट किया गया: आवश्यक ब्लॉक पर टिप्पणी करें।


मैंने अपने मूल उत्तर से कॉपी कर लिया है। stackoverflow.com/a/50403671/4387039
hchbaw
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.