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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

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

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

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