Terminal PhpStorm终端: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路径) 请随时询问有关该问题的更多信息。谢谢 另外,

我有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路径

请随时询问有关该问题的更多信息。谢谢

另外,我使用的是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
    允许您使用
    ANSICON
    向Windows命令提示符添加ansi颜色支持
接下来,您需要为PHPStorm终端包装
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
标志,如so
php bin/console--无ansi命令
php composer.phar--无ansi命令
以禁用颜色输出。我尝试了这两种路径,但都不起作用:我仍然有
?[39m?[32m
在我的PhpStorm 2016.2终端中。这正常吗?不,这不正常,因为Symfony检测到支持,可能意味着您的cygwin配置文件被更改。在PhpStorm中启动终端并运行此行。
php-r'var\u dump(目录分隔符=“\\”)“
当cygwin环境正确初始化时,它应该返回
false
,而不是
true
。如果它是
false
run
php-r”var\u dump(函数存在('posix\u isatty'));”
它应该返回
true
。还要确保从终端更新
composer.phar
php composer.phar self update
。注意,我也在使用PhpStorm 2016.2。另外,您可以检查
echo