Tại sao bash tab mở rộng dấu ngã khi tôi đang hoàn thành tên tệp vim?


8

Nếu tôi gõ cat ~/.bashr<TAB>thì nó hoàn thành cat ~/.bashrc.

Nếu tôi gõ vim ~/.bashr<TAB>thì nó hoàn thành vim /home/neil/.bashrc...

(Nó cũng tương tự với vi, được đặt bí danh "vim".)

Tôi có thể tắt nó không?

Câu trả lời:


5

điều này được kiểm soát bởi / etc / bash_completion

bạn có thể nhận xét mã mở rộng trong _Exand () nếu bạn không thích nó.

đây là phiên bản của tôi trong fedora 17, nhưng phiên bản của bạn cũng tương tự:

# 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
Vị trí của các kịch bản hoàn thành phụ thuộc hoàn toàn vào hệ thống của bạn.
Daniel Beck

Ừ chắc được. cảm ơn. Tôi chỉ sử dụng ubfox / fedora / centos những ngày này và có vẻ như tập tin ở đó. vâng, nếu đó là một bản phân phối khác tôi có thể tưởng tượng rằng tệp / hàm được đặt ở nơi khác, nhưng vẫn có khả năng nó vẫn được điều khiển chỉ bằng một tệp văn bản.
johnshen64

4
Cảm ơn, tôi đã "khắc phục" vấn đề của mình bằng cách xác định một function _expand() { :;}trong ~/.bashrc.
Neil

6

bashcó thể cung cấp tự động hoàn thành tinh vi hơn cho các lệnh nhất định (ví dụ: tự động hoàn thành các đối số chương trình khác với tên tệp). Có một chức năng Hoàn thành lập trình được xác định cho vimlệnh trên hệ thống của bạn.

Nhập completevào dấu nhắc lệnh sẽ cho bạn thấy các chức năng được sử dụng để cung cấp tự động hoàn thành cho bash.

$ complete
complete -o default -F _complete_open open

Nhập type function_nameđể tìm hiểu về định nghĩa của họ.

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

Để tìm ra nơi chức năng đã được xác định. sử dụng như sau:

$ shopt -s extdebug
$ declare -F _complete_open
_complete_open 70 /Users/danielbeck/.bash_profile
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.