'G' को 'g' में कैसे उतारा जाए ताकि बैश-पूर्ण नियमों को संरक्षित किया जा सके?


25

अगर मैं ऐसा करता हूं:

alias g='git'

मैंने सभी पूर्ण नियमों को ढीला कर दिया (यानी शाखाएं और उपाय अब टाइप करने के बाद टीएबी से स्वचालित रूप से पूर्ण नहीं हो रहे हैं, उदाहरण के लिए g push o)।


जबकि मेरे पास आपके लिए कोई उत्तर नहीं है, मुझे एक मिनट लगने वाला है और आश्चर्य है कि क्या उन दो अन्य अक्षरों को टाइप नहीं करना वास्तव में आपको बहुत फायदा दे रहा है?
मार्को Ceppi

4
ज़रूर करता है! मैं 'जी' टाइप कर रहा हूं शायद दिन में 100 बार।
Paweł Goickcicki

3
छोटे-छोटे उपनामों के लिए अक्सर उपयोग की जाने वाली छोटी-छोटी आज्ञाओं को एक दिन में सहेजना मुझे एक दिन में सैकड़ों कीपेस बचाता है। मेरे शेल इतिहास के अनुसार, मैंने g=gitपिछले महीने में 756 बार उपनाम का उपयोग किया है , जिसका अर्थ है कि मैंने 'जी' और 'आई' कीज़ को 1512 बार दबाया। कि, मेरे git उपनाम के साथ संयुक्त, शायद मुझे एक महीने में हजारों कुंजी दबाता है।

कीस्ट्रोक्स को छोटा करने का मुख्य बिंदु आपके हाथों को आपके मस्तिष्क के साथ बनाए रखने में मदद करता है।
टायलर कोलियर

Superuser.com/questions/436314/… पर स्क्रिप्ट इतनी अच्छी तरह से काम की है कि मुझे लगता है कि यह एक उल्लेख के योग्य है।
ब्रांडिजी

जवाबों:


21

मौकों की नकल करना और /etc/bash_completion.d/gitउसमें संशोधन करना , निम्नलिखित पंक्तियों को अपने साथ जोड़ें ~/.bashrc:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g

हा! Wunderbar! जैसा काम करना चाहिए वैसा ही काम करना चाहिए :)
Paweł Go likecicki

1
मुझे source /usr/share/bash-completion/completions/gitअपने .bashrc
pcx

यकीन नहीं होता कि .bashrcयहां कोड काम करता है, लेकिन यह उत्तर निश्चित रूप से पुराना है। /etc/bash_completion.d/git14.04 पर मौजूद नहीं लगता है। नीचे देखें lzap का जवाब
मैक्स वालेस

18

नवीनतम बैश-पूरा अपस्ट्रीम स्थानांतरित हो गया और चीजों को थोड़ा नाम दिया। यह बर्फ:

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

जब आप मुठभेड़ करते हैं, तो यह उबंटू के हाल के संस्करणों में उपयोग करें (जैसे 14.04, फेडोरा 22+)

completion: function `_git' not found

पूरा करने के दौरान।


2
ऐसा लगता है कि यहाँ केवल सही उत्तर है।
पंजवन्धर

__git_complete gc _git_checkoutअधिक विशिष्ट उपनामों के लिए पूर्णता सेट करने के लिए (या समान) का उपयोग करें । /usr/.../gitसही नाम खोजने के लिए ऊपर के रूप में खोजें ।
मैक्स वालेस

1
@MaxWallace - जब आप विशेष रूप से .itconfig (जैसे gc = चेकआउट) के लिए उपनाम सेट करते हैं, तो उनके लिए स्पष्ट रूप से पूरा होने की आवश्यकता नहीं है।
पिओटर अलेक्जेंडर च्मिलोव्स्की

1
@PiotrAleksanderChmielowski धन्यवाद! लेकिन मुझे नहीं लगता कि शीर्ष स्तर के बैश अन्य नामों के लिए है कि काम करता है (उदाहरण के लिए करते हैं gc=> git checkout) के रूप में aliasing करने का विरोध cकरने के लिए checkoutके भीतर git, और कह रही है git c। यदि मैं गलत हूं तो मुझे सही करों।
मैक्स वालेस

@MaxWallace हाँ, आप सही मेरी गलती कर रहे हैं,;)
पिओर एलेक्ज़ैंडर Chmielowski


2

सबसे पहले, मूल पूर्ण कमांड को देखें। उदाहरण:

$ complete | grep git

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git

अब इन्हें अपनी स्टार्टअप स्क्रिप्ट में जोड़ें (उदाहरण ~ / .bashrc):

# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g

# load dynamically loaded completion functions (may not be required)
_completion_loader git

_completion_loaderलाइन की आवश्यकता नहीं हो सकता है। लेकिन कुछ स्थितियों के लिए, पूर्ण फ़ंक्शन केवल डायनामिक रूप से लोड होने के बाद आप कमांड टाइप करते हैं और TABपहली बार दबाते हैं । इसलिए यदि आपने मूल कमांड का उपयोग नहीं किया है, और उपनाम + का प्रयास करें TAB, तो आपको "bash: पूर्ण: फ़ंक्शन नहीं मिला" जैसी त्रुटि मिल सकती है।


बहुत अच्छा काम करता है। मेरे लिए यह सही उत्तर है, पूर्ण पर grep कमांड है। पूर्ण लोडर की जरूरत नहीं थी।
पॉल कार्लटन

1

ऐसा करने का अद्यतन तरीका (मेरे लिए पूरा काम नहीं करेगा):

  1. cd - अपने घर निर्देशिका पर स्विच करें
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. source ~/git-completion.bashअपनी .bashrc फ़ाइल में जोड़ें (यदि आपके पास यह फ़ाइल आपके घर के फ़ोल्डर में एक नहीं है, तो बैश स्वचालित रूप से इसके लिए दिखेगा)
  4. alias g='git'अपनी .bashrc फ़ाइल में जोड़ें ।
  5. एक नया सत्र शुरू करें या अपने परिवर्तनों को स्रोत से शुरू करें source ~/.bashrc

2
आपने उस हिस्से को छोड़ दिया जहां वे वास्तव में आपके द्वारा जुड़ी टिप्पणी में पूर्णता __git_complete g _git
जोड़ते थे

0

पूर्णता के लिए, मैं ~/.bash-completionफ़ाइल का उपयोग करके एक उत्तर जोड़ना चाहूंगा , जो बैश-पूर्ण स्क्रिप्ट के अंत में उपलब्ध हो जाता है:

_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete gd _git_diff
_xfunc git __git_complete gb _git_branch

फिर मेरे ~/.bashrcपास मेरे पास सिर्फ उपनाम हैं। मैं कोशिश कर रहा था:

  • मेरे ~/.bashrcबैश-पूरा सामान के साथ poluting से बचें (सामान रखें जहां यह है) with
  • मेरे खोल avoid में पूरे गिट-पूरा सोर्सिंग से बचें

अनभ ु व _xfunc Git-पूरा होने वैसे सूत्रों। एक बार मैं यह पता लगाने के बाद कि मैं इसे ठीक से कैसे करूं (मैंने यहां लंचपैड से भी पूछा था ) इस जवाब को अपडेट करूंगा ।


-1

यहाँ देखो: https://gist.github.com/scue/576310b7c6b7714aad05

wget https://gist.github.com/scue/576310b7c6b7714aad05/raw/459d46761c231f5c373c1cf496920b01bb6669d2/.bash_aliases.git -O ~/.bash_aliases.git
echo "test -e ~/.bash_aliases.git && source ~/.bash_aliases.git" >> ~/.bashrc

का आनंद लें! (^ ओ ^) /


1
क्षमा करें, लेकिन यह पूरी तरह से अलग है। पूरे कमांड के लिए ऐसे सरल उपनामों को बनाना तुच्छ है।
पावेल गोइस्की

: मैं बस ओह-मेरी-Zsh की Git प्लगइन की तरह उन्हें काम करने के github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/...
scue

-1

आप हमेशा की तरह उपनाम परिभाषित कर सकते हैं:

alias g='git'

फिर बैश पूरा करने के लिए अन्य उपनाम स्थापित करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.