Mac OSX 终端 bash-completion 不起作用

Mac OSX 终端 bash-completion 不起作用

我只是按照说明操作@这个问题以便在终端中实现 git 自动完成。以下是我采取的步骤:

  • port install bash-completion
  • 添加

     if [ -f /opt/local/etc/bash_completion ]; then
       . /opt/local/etc/bash_completion
       echo "bash completion loaded"
     fi
    

    到我的 ~/.profile

  • port update git-core +svn +bash_completion +doc

然后我重启了终端,它显示“bash 补全已加载”,显然文件存在,但 tab 补全仍然只对文件有效。输入完后git按下 tab 键,没有发生任何神奇的事情。

我检查了一下,它给了我 149 个文件,/opt/local/etc/bash_completion.d/包括 git,,,。我尝试输入这些命令,然后按 Tab 键,但没有任何效果。javamanport

有人知道我做错了什么吗?也许我弄乱了环境变量或其他东西。有谁安装了 bash-completion 可以告诉我一个命令应该在哪里工作,比如port up然后点击 tab --> port upgrade。谢谢 ;-)


编辑:

找到另一个描述我的方法的链接:如何让 git-completion.bash 在 Mac OS X 上运行?

答案1

对我来说tmux,它可以工作,但在普通的 iTerm2 中不行。解决方案是将命令设置/opt/local/bin/bash -l为我使用的 iTerm2 配置文件。我找到了解决方案https://trac.macports.org/wiki/howto/bash-completion

答案2

MacPorts 的 bash-completion 已经断断续续地坏掉了一段时间。我建议尝试芬克或者自酿啤酒

答案3

我认为最简单的方法是切换到 zsh。需要进行一些配置,但仅此而已。

我将其添加到我的 ~/.zshenv 文件中


#******************************************************************************************
# From http://zshwiki.org/home/examples/compquickstart
zmodload zsh/complist
autoload -U compinit && compinit

_force_rehash() {
 (( CURRENT == 1 )) && rehash
 return 1   # Because we didn't really complete anything
}
zstyle ':completion:::::' completer _force_rehash _complete _approximate
zstyle -e ':completion:*:approximate:*' max-errors 'reply=( $(( ($#PREFIX + $#SUFFIX) / 3 )) )'
zstyle ':completion:*:descriptions' format "- %d -"
zstyle ':completion:*:corrections' format "- %d - (errors %e})"
zstyle ':completion:*:default' list-prompt '%S%M matches%s'
zstyle ':completion:*' group-name ''
zstyle ':completion:*:manuals' separate-sections true
zstyle ':completion:*:manuals.(^1*)' insert-sections true
zstyle ':completion:*' menu select
zstyle ':completion:*' verbose yes

答案4

我设法通过 Fink 启动并运行 Bash。

fink install bash-completion

获得 Fink 后,Bash 的 tab 补全功能便可用。这包括 Git 命令,正如您上面描述的。

相关内容