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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

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

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

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