Laravel artisan bash 命令自動補全

Zhwt發表於2020-04-10

原始程式碼段請參考以下連結, 歡迎 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

希望對你能有所幫助! 歡迎評論交流意見或建議!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章