Terminal PhpStorm终端:Cygwin颜色不起作用
我有PhpStorm 2016.2,我在Shell路径中添加了Cygwin,如下所示:Terminal PhpStorm终端:Cygwin颜色不起作用,terminal,cygwin,wamp,phpstorm,symfony-console,Terminal,Cygwin,Wamp,Phpstorm,Symfony Console,我有PhpStorm 2016.2,我在Shell路径中添加了Cygwin,如下所示:“C:\cygwin64\bin\env.exe”CHERE\u INVOKING=1/bin/bash.exe 它很好用,但颜色不合适。 例如,我有?[32m名称,而不是名称为绿色 我尝试了几件事,比如添加插件Grep控制台以支持ANSI颜色,但没有成功 使用具有多种ANSI颜色的行非常困难?[39m?[32m方案?[39m?[32m主机?[39m?[32m路径) 请随时询问有关该问题的更多信息。谢谢 另外,
“C:\cygwin64\bin\env.exe”CHERE\u INVOKING=1/bin/bash.exe
它很好用,但颜色不合适。
例如,我有?[32m名称
,而不是名称
为绿色
我尝试了几件事,比如添加插件Grep控制台以支持ANSI颜色,但没有成功
使用具有多种ANSI颜色的行非常困难?[39m?[32m方案?[39m?[32m主机?[39m?[32m路径
)
请随时询问有关该问题的更多信息。谢谢
另外,我使用的是Windows 10
编辑
当我在PHPStorm终端中执行/usr/bin/which php
时,我得到/cygdrive/d/wamp2/bin/php/php5.6.16/php
。我的WAMP中有php5.6.16和php7.0.0,我目前正在使用php7.0.0
编辑2我为php7.0.0添加了一个$PATH,所以现在我有了
/cygdrive/d/wamp2/bin/php/php7.0.0/php
,当我这样做/usr/bin/which php
时。但是主要的问题仍然存在。你需要添加-l
开关到你的终端路径
在添加交换机之前:
完整路径应该是
"C:\cygwin64\bin\env.exe" CHERE_INVOKING=1 /bin/bash.exe -l
或
单击终端对话框左上角的红色X,确保关闭当前打开的终端窗口,然后重新打开。
现在再次运行该命令,它应该如下所示:
有关更多信息,请参阅Cygwin终端中的man bash
更新 根据您对WAMP安装的评论。您需要在Cygwin中安装PHP,以使其正确运行,这将允许使用
posix
函数行,并为您的PHP环境模拟Linux发行版。这通常是使用Cygwin的原因
您打算如何在PHP中使用Cygwin
问题是Cygwin正在使用Windows PHP可执行文件,Symfony控制台组件StreamOutput
将其检测为PHP的Windows实例,而不是Cygwin/Linux,以便使用posix_isatty
下面是Symfony控制台用于向终端渲染颜色输出的代码示例
if ('\\' === DIRECTORY_SEPARATOR) {
static::$defaultColors = @(
0 >= version_compare('10.0.10586', PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD)
|| false !== getenv('ANSICON')
|| 'ON' === getenv('ConEmuANSI')
|| 'xterm' === getenv('TERM')
);
} elseif (function_exists('posix_isatty')) {
$h = stream_get_meta_data($this->outputStream) + array('wrapper_type' => null);
$h = 'Output' === $h['stream_type'] && 'PHP' === $h['wrapper_type'] ? fopen('php://stdout', 'wb') : $this->outputStream;
}
echo export ANSICON=true >> ~/.bashrc
添加第二个答案以提供原始答案的替代解决方案 ANSICON支持 首先下载并安装
- 解压缩windows二进制文件
(x86或x64目录内容)插入
($PATH
)D:\wamp\bin\php\php7.0.0
- 可以从Windows命令提示符下运行
允许您使用ansicon-i
向Windows命令提示符添加ansi颜色支持ANSICON
ANSICON
"X:\path\to\ansicon.exe" -p "C:\cygwin64\bin\env.exe" CHERE_INVOKING=1 /bin/bash.exe
注意:如原始答案中所述,使用-l
或-login
将/usr/bin
和/usr/local/bin
添加到$PATH
中,并导致
终端使用Cygwin PHP安装,不需要ANSICON
接下来,在~/.bashrc
文件中,需要在文件底部添加
export ANSICON=true
通过从Cygwin终端运行以下命令,您可以轻松地追加该行
if ('\\' === DIRECTORY_SEPARATOR) {
static::$defaultColors = @(
0 >= version_compare('10.0.10586', PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD)
|| false !== getenv('ANSICON')
|| 'ON' === getenv('ConEmuANSI')
|| 'xterm' === getenv('TERM')
);
} elseif (function_exists('posix_isatty')) {
$h = stream_get_meta_data($this->outputStream) + array('wrapper_type' => null);
$h = 'Output' === $h['stream_type'] && 'PHP' === $h['wrapper_type'] ? fopen('php://stdout', 'wb') : $this->outputStream;
}
echo export ANSICON=true >> ~/.bashrc
这将确保Symfony找到具有不同Windows版本的ANSICON环境变量
接下来重新启动PHPStorm并打开终端进行测试。
终端通常支持ANSI颜色(如果我执行像
npm.cmd-g这样的命令(具有彩色输出),则在Windows 7上(使用cmd
)对我来说效果很好)。这可能是Cygwin/bash在这里有一些事情要做…谢谢你的回答。当我使用Cygwin env.exe在Phpstorm终端中执行php bin/console d:r
时,我会得到ANSI颜色代码?[32m
。但是当我直接在Cygwin中执行相同的命令时,我得到了良好的颜色显示。因此,我的Cygwin看起来还行。这更像是Phpstorm对命令返回的内容解释得不好。我只是测试了一些有趣的东西。当我使用Cygwin在我的Phpstorm终端中执行ls-l--color=always
时,我得到了颜色。看起来不仅symfony命令(例如:php-bin/console d:r
)给出了ANSI代码?[32m
。但我仍然不知道漏洞来自何处……请提供您正在使用的Windows 10的版本。(单击Windows图标->设置->系统->关于)
版本1607/build 14393有问题(周年更新)这似乎导致ANSI控制台支持出现一些问题。@WillMic您可能需要在Cygwin php环境中安装php posix
扩展。除此之外,Cygwin还应配备MinTTY,它提供颜色(ANSI)support.Symfony应在定义了环境变量ANSICON后着色(检查~/.bash\u rc
)对于它,唯一的其他建议是传递--无ansi
标志,如sophp bin/console--无ansi命令
或php composer.phar--无ansi命令
以禁用颜色输出。我尝试了这两种路径,但都不起作用:我仍然有?[39m?[32m
在我的PhpStorm 2016.2终端中。这正常吗?不,这不正常,因为Symfony检测到支持,可能意味着您的cygwin配置文件被更改。在PhpStorm中启动终端并运行此行。php-r'var\u dump(目录分隔符=“\\”)“
当cygwin环境正确初始化时,它应该返回false
,而不是true
。如果它是false
runphp-r”var\u dump(函数存在('posix\u isatty'));”
它应该返回true
。还要确保从终端更新composer.phar
php composer.phar self update
。注意,我也在使用PhpStorm 2016.2。另外,您可以检查echo