यह Disable auto-completion of remote branches in Git Bash? से संबंधित है।ज़श में रिमोट शाखाओं के स्वत: पूर्णता को अक्षम करें?
कोई भी जानता है कि zsh के साथ ऐसा कैसे करें?
यह Disable auto-completion of remote branches in Git Bash? से संबंधित है।ज़श में रिमोट शाखाओं के स्वत: पूर्णता को अक्षम करें?
कोई भी जानता है कि zsh के साथ ऐसा कैसे करें?
zstyle :completion::complete:git-checkout:argument-rest:headrefs command "git for-each-ref --format='%(refname)' refs/heads 2>/dev/null"
स्पष्टीकरण:
टाइप करना git checkout <Control-x><h>
invokes _complete_help
जो कैसे zsh के पूरा होने प्रणाली के आंतरिक भागों को उजागर करता है अगर आप वर्तमान संदर्भ में टैब दबाएंगे (<Control-x><h>
दबाए जाने के बजाय) कार्य करेगा। इससे यह देखना संभव है कि zsh गिट शाखा प्रमुखों के नामों को पूरा करने के लिए __git_heads
फ़ंक्शन का आह्वान करेगा। आप तो लिखते हैं, तो which __git_heads
, जैसा कि आप देख सकते हैं कि इन शाखा सिर नामों के माध्यम से प्राप्त कर रहे हैं:
_call_program headrefs git for-each-ref --format='"%(refname)"' refs/heads refs/remotes 2>/dev/null
हमारे लिए सौभाग्य से, _call_program
विशेष रूप से उपयोगकर्ता डिफ़ॉल्ट व्यवहार को बदलने के लिए अनुमति देने के लिए बनाया गया है। तो उपर्युक्त zstyle
आदेश अंतर्निहित एक के बजाय वैकल्पिक git for-each-ref ...
आमंत्रण का उपयोग करने के लिए zsh को निर्देश देता है, और आप देख सकते हैं कि उपरोक्त आमंत्रण में, मैंने refs/remotes
पैरामीटर को हटा दिया। zstyle
का पहला पैरामीटर पूरा करने का संदर्भ है, और यहां इसका अर्थ है "जब भी पूर्णता प्रणाली headrefs
टैग के लिए पूरा होने का अनुरोध कर रही है, तो उपयोगकर्ता git checkout
के लिए तर्क पूरा कर रहा है। तो यह zstyle
केवल git checkout
को प्रभावित करेगा, और कोई अन्य git
उप नहीं -commands।
आप अपने .zshrc
फाइल करने के लिए इस लाइन जोड़कर git checkout
पर स्वत: पूर्ण करने निष्क्रिय कर सकते हैं:
compdef -d git checkout
मैं ऐसे तरीकों की तलाश में था जो दूरस्थ शाखाओं के स्वत: पूर्ण होने से बचा था। हालांकि मैं स्थानीय शाखाओं के ऑटो-पूर्ण होना चाहता हूं। –
@ GalderZamarreño डर है कि मेरे zsh ज्ञान के दायरे से परे है; zsh सूची का प्रयास कर सकते हैं; वे सहायक लोगों की तरह लगते हैं। – Christopher
ऐसा लगता है कि __git_heads
अब केवल स्थानीय शाखाओं की जाँच करता है, लेकिन पूरा होने फ़ाइलों के बजाय __git_refs
कहते हैं।
मैं git-completion.bash
, जो zsh _git
आदेश द्वारा करने के लिए के माध्यम से प्रॉक्सी है करने के लिए इस पैच लगाने से इस हैक कर लिया :
--- git-completion.bash.old 2015-04-02 16:09:38.000000000 -0700
+++ git-completion.bash 2015-04-02 16:10:24.000000000 -0700
@@ -1032,13 +1032,7 @@
"
;;
*)
- # check if --track, --no-track, or --no-guess was specified
- # if so, disable DWIM mode
- local flags="--track --no-track --no-guess" track=1
- if [ -n "$(__git_find_on_cmdline "$flags")" ]; then
- track=''
- fi
- __gitcomp_nl "$(__git_refs '' $track)"
+ __gitcomp_nl "$(__git_heads)"
;;
esac
}
यह एक सही समाधान नहीं है, लेकिन यह मेरे उपयोग के मामलों के लिए काम करता है और 10 सेकंड के बजाय पूरा होने देता है।
git checkout <Ctrl-X><H>
लिखकर आपके टैग का एक समूह देखते हैं, कुछ जो प्रासंगिक प्रतीत होते हैं:
$ git checkout
tags in context :completion::complete:git-checkout:argument-rest:
remote-branch-names-noprefix (__git_describe_branch __git_describe_commit __git_remote_branch_names_noprefix _git-checkout _git)
heads-remote (__git_describe_branch __git_describe_commit __git_heads_remote __git_heads __git_commits __git_tree_ishs _git-checkout _git)
[...]
पहली नजर में, हम remote-branch-names-noprefix
के व्यवहार को बदलने की कोई उपसर्ग के साथ दूरदराज के शाखा नाम देना, को रोकने के लिए की जरूरत है।
, चलो देखते हैं कि इन टैग, उपयोग के साथ जुड़े रहे हैं प्रविष्टियां करते हैं:
$ zstyle ':completion:*' group-name ''
$ zstyle ':completion:*' format 'Completing "%d":'
$ git checkout T<Tab>
Completing "remote branch name":
T3522-plugins_and_stuff T7482
Completing "local head":
T7626-async
कोष्टक में ऊपर टैग नाम निम्नलिखित, वहाँ जो एक स्वत: पूर्ण प्रविष्टि उत्पन्न किया जा रहा करने के लिए नेतृत्व आदेशों की एक श्रृंखला है उस टैग के लिए। remote-branch-names-noprefix
की श्रृंखला में आप __git_remote_branch_names_noprefix
देख सकते हैं जो प्रासंगिक लगता है। /usr/share/zsh/functions/Completion/Unix/_git
में देखो:
(($+functions[__git_remote_branch_names_noprefix])) ||
__git_remote_branch_names_noprefix() {
declare -a heads
branch_names=(${${${${(f)"$(_call_program remote-branch-refs-noprefix git for-each-ref --format='"%(refname)"' refs/remotes 2>/dev/null)"}#refs/remotes/}#*/}:#HEAD})
__git_command_successful $pipestatus || return 1
__git_describe_commit branch_names remote-branch-names-noprefix 'remote branch name' "[email protected]"
}
आप देख सकते हैं कि _call_program
remote-branch-refs-noprefix
परिभाषित करने के लिए प्रयोग किया जाता है। हम इस परिभाषा को git-checkout
के मामले में बदलना चाहते हैं।इसे "गूंज" के साथ बदलकर, यह स्वत: पूर्ण प्रविष्टियां प्रदान करना बंद कर देगा:
zstyle ':completion::complete:git-checkout:argument-rest:remote-branch-refs-noprefix' command "echo"
ऑटो-पूर्ण में रिमोट और स्थानीय को दो अलग-अलग अनुभागों में कैसे विभाजित किया जाएगा? जैसे मुझे विशेष सिर ('HEAD',' ORIG_HEAD', 'FETCH_HEAD', आदि), फिर स्थानीय शाखाएं, फिर दूरस्थ शाखाएं पसंद हैं। यह मेरे लिए स्पष्ट नहीं है कि यह कैसे किया जाएगा। यदि आपके उत्तर का विस्तार करना आसान है, तो यह सूख जाएगा। यदि नहीं, तो मैं एक नया प्रश्न खोलूंगा। –
* संभवतः ऐसा करने का एक तरीका है - आखिरकार, समूहबद्ध तंत्र (मैन्युअल में 'समूह-नाम' और 'समूह-आदेश' के लिए खोजें) लेकिन मुझे पता नहीं है कि कैसे विभाजित किया जाए इन समूहों में विभिन्न सिर बाहर - तो शायद एक अलग सवाल के लायक है। –