当我完成vim文件名时,为什么bash用tab键扩展波浪号?


8

如果输入,cat ~/.bashr<TAB>则完成cat ~/.bashrc

如果输入,vim ~/.bashr<TAB>则完成vim /home/neil/.bashrc...

(与的功能相同vi,别名为"vim"。)

我可以关闭它吗?

Answers:


5

这由/ etc / bash_completion控制

如果您不喜欢,可以在_expand()中注释掉扩展代码。

这是我在fedora 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,似乎文件在那里。是的,如果是另一个发行版,我可以想象该文件/功能位于其他位置,但是仍然可能仅由文本文件控制。
johnshen64 2012年

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.