当前位置: 首页 > 后端技术 > PHP

PHP--摸摸你的手,教你一个会自动补全的命令行工具1

时间:2023-03-30 05:32:55 PHP

前言在使用symfony的时候,发现有些关键字在使用命令行的时候会自动提示。简介随着laravel、symfony等框架的流行,命令行工具也越来越流行,但是很多时候命令太多,不可能记住所有的参数,或者参数太长输入不进去太不方便了。这个时候你是不是也想拥有IDE中那样的自动补全功能呢?摸摸手,一起使用自动补全工具获取命令行字符串想要自动补全,就必须获取命令行输入的数据,那么如何获取数据呢?具体可以参考官方文档PHP获取命令输入。这里我们使用一种写法$c=fread(\STDIN,1);这样我们就可以获得每次输入的击键。获取单个字符经过以上操作,我们已经可以获取到输入的内容了,但是我们发现了一个问题,我们必须回车才能获取到输入的内容,即使我们设置了fread的最大读取长度,那么究竟是什么问题?原来在Linux终端中,默认是回车。那么我们必须关闭这个功能。为了防止我们在使用其他软件的时候出现问题,我们需要在不需要之后关闭这个功能。//执行下面命令后,可以逐个字符获取$sttyMode=shell_exec('stty-g');shell_exec('stty-icanon-echo');//恢复原来的状态shell_exec(sprintf('stty%s',$sttyMode));这个时候我们在测试$sttyMode=shell_exec('stty-g');shell_exec('stty-icanon-echo');$c=fread(\STDIN,1);var_dump($c);shell_exec(sprintf('stty%s',$sttyMode));简单的自动完成1,"\xD0"=>1,"\xE0"=>2,"\xF0"=>3][$c&"\xF0"]);}printf("\r\033[k");foreach($autoCompleteas$one){如果(strpos($one,$c)===0){printf($one);}}}}shell_exec(sprintf('stty%s',$sttyMode));接下来,让我们对其进行优化。输入A后,让光标在A的后面。这样一个简单的自动补全工具就在下面诞生了,下面我们一起来优化一下这个工具。注意:Windows不支持自动完成