जब मैं vim फ़ाइल नाम पूरा कर रहा हूं, तो bash टैब को क्यों विस्तारित करता है?


8

अगर मैं टाइप करता हूं cat ~/.bashr<TAB>तो यह पूरा हो जाता है cat ~/.bashrc

अगर मैं टाइप करता हूं vim ~/.bashr<TAB>तो यह पूरा हो जाता है vim /home/neil/.bashrc...

(यह उसी के साथ करता है vi, जिसे इसके लिए उपनाम दिया गया है "vim"।)

क्या मैं इसे बंद कर सकता हूं?

जवाबों:


5

इसे / etc / bash_completion द्वारा नियंत्रित किया जाता है

यदि आपको यह पसंद नहीं है, तो आप विस्तार कोड _expand () में टिप्पणी कर सकते हैं।

यहाँ फेडोरा 17 में मेरा संस्करण है, लेकिन आपका समान होना चाहिए:

# This function expands tildes in pathnames
#
_expand()
{
    # FIXME: Why was this here?
    #[ "$cur" != "${cur%\\}" ] && cur="$cur\\"

    # Expand ~username type directory specifications.  We want to expand
    # ~foo/... to /home/foo/... to avoid problems when $cur starting with
    # a tilde is fed to commands and ending up quoted instead of expanded.

    if [[ "$cur" == \~*/* ]]; then
        eval cur=$cur
    elif [[ "$cur" == \~* ]]; then
        cur=${cur#\~}
        COMPREPLY=( $( compgen -P '~' -u "$cur" ) )
        [ ${#COMPREPLY[@]} -eq 1 ] && eval COMPREPLY[0]=${COMPREPLY[0]}
        return ${#COMPREPLY[@]}
    fi
}

1
पूर्ण स्क्रिप्टिंग का स्थान पूरी तरह से आपके सिस्टम पर निर्भर करता है।
डैनियल बेक

हाँ शायद। धन्यवाद। मैं केवल इन दिनों ubuntu / fedora / centos का उपयोग करता हूं और ऐसा लगता है कि फ़ाइल है। हाँ, अगर यह एक और डिस्ट्रो है तो मैं कल्पना कर सकता हूं कि फ़ाइल / फ़ंक्शन कहीं और स्थित है, लेकिन फिर भी यह अभी भी एक पाठ फ़ाइल द्वारा अभी भी नियंत्रित है।
जॉनशेन ६४

4
धन्यवाद, मैं एक function _expand() { :;}में परिभाषित करके मेरी समस्या "तय" है ~/.bashrc
नील

6

bashकुछ आदेशों के लिए अधिक परिष्कृत स्वतः पूर्णता प्रदान कर सकते हैं (उदाहरण के लिए फ़ाइल नामों के अलावा अन्य प्रोग्राम तर्क)। आपके सिस्टम पर कमांड के लिए इस तरह का एक प्रोग्रामेबल कम्प्लीशन फंक्शन vimहै।

completeकमांड प्रॉम्प्ट पर टाइप करने से आपको पता चलेगा कि कौन-कौन से फ़ंक्शंस का उपयोग ऑटोकॉमप्लेक्शन प्रदान करने के लिए किया जाता है bash

$ complete
complete -o default -F _complete_open open

type function_nameउनकी परिभाषा के बारे में जानने के लिए टाइप करें।

$ type _complete_open
_complete_open is a function
_complete_open () 
{ 
   # function definition
}

यह पता लगाने के लिए कि फ़ंक्शन कहाँ परिभाषित किया गया था। निम्न का उपयोग करें:

$ shopt -s extdebug
$ declare -F _complete_open
_complete_open 70 /Users/danielbeck/.bash_profile
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.