goのサブコマンドを補完するように設定した

goを久しぶりに更新しました。そしたら8g, 8lとかが無くなって少し焦りました。なんとなくgoとタイプしてみたら、goコマンドに統一されたようだということが分かりました。いつごろからgoになったんでしょうね。

サブコマンドの補完機能が標準でついてなかったので、"/etc/bash_completion.d"下に次のファイルを設置しておきました(ubuntuだとここを編集するみたいです。macとかの情報もググったら載ってました)。

_go()
{
    local opts cur prev
    opts="build clean doc env fix fmt get install list run test tool version vet help"
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    case "${prev}" in
        post|private_post)
            COMPREPLY=( $(compgen -f ${cur}) )
            return 0
            ;;
    esac

    COMPREPLY=( $( compgen -W "${opts}" ${cur} ) )
}
complete -F _go go