gsh के साथ पूरा होने की संभावना: रिक्त स्थान के साथ फ़ाइल नाम ठीक से बच नहीं रहे हैं


20

पूरा होने पर:

मुझे अपने सिस्टम पर गिट के फाइलनाम ऑटोकंप्लीटेशन से कठिनाई हो रही है। मैं ओएस एक्स (10.9.3) पर (1.9.3) के zshसाथ (5.0.5) का उपयोग कर रहा हूं git। दोनों zshऔर githomebrew के माध्यम से स्थापित किया गया है। (पूर्ण संस्करण आउटपुट पोस्ट के निचले भाग में हैं।)

gitफ़ाइलनाम पूरा होने की जगह रिक्त स्थान नहीं डाल रहा है जैसे मुझे उम्मीद है। जब मैं नाम की जगह के साथ एक फ़ाइल का नाम टाइप करता हूं, तो शेल बिना रिक्त स्थान के फ़ाइल नाम सम्मिलित करता है। zshबिल्ट-इन पूर्णता ऐसा नहीं करता है, लेकिन gitकरता है।

यहाँ एक उदाहरण है जो मैं देख रहा हूँ।

मेरे पास उनके नाम में रिक्त स्थान के साथ कुछ फाइलों के साथ एक भंडार है।

% ls -la
test
test four - latest.txt
test three.txt
test two

जब मैं फ़ाइल नाम सम्मिलित करने के लिए टैब पूर्णता का उपयोग करता हूं तो शेल बैकलैश फिल्म्स से बच जाता है।

% echo "testing" >> test<tab>

तीन बार टैब मारने के बाद इस पर ऑटोकंप्लीट्स।

% echo "testing" >> test\ four\ -\ latest.txt
––– file
test                       test\ four\ -\ latest.txt  test\ three.txt            test\ two                

git status इन फ़ाइलनामों को उद्धरणों में दिखाता है (यह पूरी तरह से समझ में आता है कि क्या है):

% git status --short
 M test
 M "test four - latest.txt"
 M "test three.txt"
 M "test two"

लेकिन जब मैं git addटैब स्वतः पूर्णता के साथ प्रयास करता हूं , तो यह बग़ल में चला जाता है।

% git add test<tab>

तीन बार टैब मारने के बाद इसमें परिणाम:

% git add test four - latest.txt
test                    test four - latest.txt  test three.txt          test two

मैं इस एक सा regressing की कोशिश की है: मेरी dotfiles, संस्करण नियंत्रण में हैं तो मैं कोशिश की है zsh 4.3.15, git 1.8.3और एक साल पहले से मेरे dotfiles, जब मैं लगभग कुछ कर रहा हूँ इस काम किया। अजीब तरह से, यह सेटअप अभी भी टूट गया था।

मैं है यह करने के लिए नीचे संकुचित _gitपूरा होने फ़ाइल कि से प्राप्त की जा रही है /usr/local/share/zsh/site-functions:

% echo $FPATH
/usr/local/share/zsh/site-functions:/usr/local/Cellar/zsh/5.0.5/share/zsh/functions
% ls -l /usr/local/share/zsh/site-functions
_git@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/_git
_hg@ -> ../../../Cellar/mercurial/3.0/share/zsh/site-functions/_hg
_j@ -> ../../../Cellar/autojump/21.7.1/share/zsh/site-functions/_j
git-completion.bash@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/git-completion.bash
go@ -> ../../../Cellar/go/HEAD/share/zsh/site-functions/go

अगर मैं $FPATHअपने .zshrcरन से पहले मैन्युअल रूप से बदल जाता हूं compinit(या बस /usr/local/share/zsh/site-functions/_gitप्रतीकात्मक लिंक को हटा देता हूं ), तो पूर्णता वापस आती है zshऔर उम्मीद के मुताबिक काम करती है।

zshपूरा होने के बिना _git:

% git add test<tab>

तीन बार टैब मारने से सही परिणाम मिलते हैं:

% git add test\ four\ -\ latest.txt
––– modified file
test                       test\ four\ -\ latest.txt  test\ three.txt            test\ two                

साइड नोट: मैंने git-completion.bashलिंक हटाने की कोशिश की है , और यह पूरी तरह से चीजों को तोड़ देता है:

% git add test<tab>

इस बस्ट-नेस का उत्पादन करता है:

% git add test__git_zsh_bash_func:9: command not found: __git_aliased_command
    git add test
––– file
test                       test\ four\ -\ latest.txt  test\ three.txt            test\ two                

मैं वास्तव में इसे ठीक से काम करना चाहता हूं : बाकी _gitपूर्णताएं बहुत अच्छी थीं क्योंकि वे zshलोगों की तुलना में अधिक रीपो-जागरूक होते हैं, लेकिन मुझे रिक्त स्थान या अन्य विशेष पात्रों के साथ फ़ाइल नाम की आवश्यकता होती है ताकि वे ठीक से बच सकें।


सॉफ्टवेयर संस्करण:

% zsh --version
zsh 5.0.5 (x86_64-apple-darwin13.0.0)

% git --version
git version 1.9.3

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.9.3
BuildVersion:   13D65

मैंने फाइलें _gitऔर git-completion.bashफाइलें अपलोड कर दी हैं : git- complete.bash और _git ( _git.shताकि CloudApp का नाम बदलकर इसे ब्राउज़र में देखा जा सके।)


2
श्रोताओं में गैर-OSX उपयोगकर्ताओं के लिए, क्या आप किसी ऐसी जगह से जुड़ सकते हैं, जहाँ हम आपके गिट पैकेज के साथ उस जहाज को पूरा कर सकते हैं?
गिल्स एसओ- बुराई को रोकना '28

2
ज़रूर: _git (CloudApp के लिए _git.sh का नाम बदलकर): cl.ly/code/423e0i1X1p29 और git- complete.bash
cbowns

3
मेरी नज़र थी _gitcompadd -Qअजीब दिखने के लिए कॉल : का -Qअर्थ है "विशेष पात्रों को उद्धृत न करें"। कॉल -Qसे हटाने का प्रयास करें compadd
गिल्स एसओ- बुराई को रोकें '28

3
मुझे यकीन है कि समस्या zshशब्द-विभाजन आदेश-प्रतिस्थापन परिणामों के डिफ़ॉल्ट व्यवहार के कारण है । वास्तव में - \bsपलायन आवश्यक नहीं है - या आप इसे कैसे देखते हैं, इस पर निर्भर करता है। सेट "SH_WORD_SPLIT" zsh.sourceforge.net/FAQ/zshfaq03.html
mikeserv

4
वैकल्पिक रूप से bash पूरा होने वाले फ़ंक्शन को आउटपुट के लिए संपादित करें जैसे कि ${=$(completion)}या जो कुछ भी हो वह वापस आ जाए।
mikeserv

जवाबों:


5

इस बग का उल्लेख मेलिंग सूची में किया गया है

फिक्स फ़ाइल को संपादित करने git-completion.zshऔर -Qविकल्प को अंदर से हटाने के लिए compaddहै __gitcomp_file

--- i/contrib/completion/git-completion.zsh
+++ w/contrib/completion/git-completion.zsh
@@ -90,7 +90,7 @@ __gitcomp_file ()

    local IFS=$'\n'
    compset -P '*[=:]'
-   compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
+   compadd -p "${2-}" -f -- ${=1} && _ret=0
 }

 __git_zsh_bash_func ()

यह फ़ाइल contrib/completionनिर्देशिका से स्थापित है , और इसका पथ आपके पैकेज प्रबंधक के साथ भिन्न हो सकता है। यदि आप macOS पर होमब्रे के साथ स्थापित हैं, तो यह अंदर स्थित है /usr/local/Cellar/git/2.10.2/share/zsh/site-functions


इस बारे __git_aliased_commandमें त्रुटि इसलिए है क्योंकि शेयर निर्देशिका ने नाम बदलकर git-core (कम से कम FreeBSD) कर दिया है, जिसके कारण यह नहीं मिल रहा है git-completion.bash। यदि आप लाइन 33 पर पहले स्थान को हार्डकोड में बदलते हैं तो /usr/local/share/git-core/contrib/completion/git-completion.bashयह फिर से काम करता है।
मेल्विन

echoइन फ़ंक्शन परिभाषाओं के ठीक ऊपर एक फ़ाइल में है, और मेरे शेल में इसकी उपस्थिति की कमी (और परीक्षण करते समय कुछ आसन्न कोड) से पता चलता है कि ये पूर्णताएं भी उपयोग नहीं की जाती हैं:if [[ -n ${ZSH_VERSION-} ]]; then echo "WARNING: this script is deprecated, please see git-completion.zsh" 1>&2
cbowns

1
मेरे लिए यह काम किया (git 2.18, zsh 5.4.2 osx) जब मैंने बदला compadd -Q-> मेरे इंस्ट्रूमेंट git इंस्टालेशन के फोल्डर compaddमें _gitऔर सभी उदाहरणों के लिए । धन्यवाद!!! git-completion.bash/usr/local/Cellar/git/2.18.0/share/zsh/site-functions/
मर्लिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.