Laravel artisan bash 命令自动补全

原始代码段请参考以下链接, 欢迎 star 或者评论意见建议
Github: Bash-only Laravel Artisan tab auto-complete
码云: Laravel artisan bash 命令自动补全

在日常开发中, 我们经常需要从命令行输入一些 laravel 的命令, 然而在自动补全这一方面似乎并没有太好的解决方案, 可能大家还是靠娴熟的手速输入众多的 laravel 命令. 而且目前多数的 Laravel 自动补全方案都需要额外安装一个全局的 composer 包来实现自动补全功能. 然而实际上并不需要这么麻烦, 这里提供一个纯 bash 的解决方法来解决这个问题. 只需要在你的 ~/.bash_profile 之类的 bash 初始化文件中加入下列代码即可实现自动补全:

artisan 命令补全

ARTISAN_COMMANDS=`php artisan --raw --no-ansi list | sed "s/[[:space:]].*//g"`
_artisan()
{
    COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
    COMPREPLY=(`compgen -W "$ARTISAN_COMMANDS" -- "${COMP_WORDS[COMP_CWORD]}"`)
    return 0
}
complete -F _artisan artisan
alias artisan='php artisan'

如果在 Windows 的 Git-Bash 上出现类似于:

stdout is not a tty

的错误, 只需要把 ARTISAN_COMMANDS= 这一行改成:

ARTISAN_COMMANDS=`php.exe artisan --raw --no-ansi list | sed "s/[[:space:]].*//g"`

即可.

这样就可以在 bash 环境中使用自动补全了, 输入 artisan 然后按两下 Tab 即可列出相关命令, 非常方便. 输入一半的命令也可以这样补全.

$ artisan m
make:channel       make:listener      make:provider      migrate:install
make:command       make:mail          make:request       migrate:refresh
make:component     make:middleware    make:resource      migrate:reset
make:controller    make:migration     make:rule          migrate:rollback
make:event         make:model         make:seeder        migrate:status
make:exception     make:notification  make:test
make:factory       make:observer      migrate
make:job           make:policy        migrate:fresh

$ artisan mig
$ artisan migrate
migrate           migrate:install   migrate:reset     migrate:status
migrate:fresh     migrate:refresh   migrate:rollback

php artisan 式命令补全

如果对原来的 php artisan 比较熟悉, 不希望直接输入 artisan 后面带参数的命令, 请使用下面的脚本:

ARTISAN_COMMANDS=`php artisan --raw --no-ansi list | sed "s/[[:space:]].*//g"`
_artisan()
{
    local arg="${COMP_LINE#php }"

    case "$arg" in
        artisan*)
            COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
            COMPREPLY=(`compgen -W "$ARTISAN_COMMANDS" -- "${COMP_WORDS[COMP_CWORD]}"`)
            ;;
        *)
            COMPREPLY=( $(compgen -o default -- "${COMP_WORDS[COMP_CWORD]}") )
            ;;
        esac

    return 0
}
complete -F _artisan php

也可以起到同样的效果:

$ php artisan k
$ php artisan key:generate

如果在补全的时候出现类似

$ php artisan
$ php artisan Could
$ php artisan Could Could Could

这样的情况, 说明是找不到 artisan 文件, 请尝试在 laravel 目录下启动终端, 或者修改前面命令里面 php artisan 这一块让它指向一个全局的 artisan 文件路径.

希望对你能有所帮助! 欢迎评论交流意见或建议!

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

之前也这么弄过,后来发现 oh-my-zsh 有这种插件,,,就是按 tab 时,,,列出来有点慢,,,

5年前 评论
Zhwt (楼主) 5年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!