PhpStorm终端:Cygwin颜色不起作用

时间:2016-07-18 13:26:37

标签: terminal cygwin wamp phpstorm symfony-console

我有PhpStorm 2016.2,我在Shell路径中添加了Cygwin,如下所示:"C:\cygwin64\bin\env.exe" CHERE_INVOKING=1 /bin/bash.exe

它运作良好,但颜色不起作用。 例如,我有?[32m Name而不是Name为绿色。

我尝试过添加插件Grep控制台以获得ANSI Color的支持,但是没有用。

使用多种ANSI颜色?[39m ?[32m Scheme ?[39m ?[32m Host ?[39m ?[32m Path的线条很难处理。

不要犹豫,询问有关此问题的更多信息。谢谢。

P.S。我在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。但主要问题仍然存在。

2 个答案:

答案 0 :(得分:5)

添加第二个答案,为我原来的答案提供替代解决方案。

ANSICON支持

首先下载并安装ANSICON

  • 解压缩windows二进制文件 (x86或x64目录内容)进入$PATHD:\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

Ansicon Wrapper

  

注意:如原始答案中所述,使用-l--login会将/usr/bin/usr/local/bin添加到您的{{1}并导致   终端使用Cygwin PHP安装,不需要ANSICON。

接下来在$PATH文件中,您需要在文件底部添加。

~/.bashrc

您可以通过从Cygwin终端运行以下命令来轻松追加该行。

export ANSICON=true

这将确保Symfony将使用不同的Windows版本找到ANSICON环境变量。

接下来重启PHPStorm并打开终端进行测试。 Composer Ansicon

答案 1 :(得分:2)

您需要将-l开关添加到终端路径。

在添加开关之前: Cygwin Before Switch

完整路径应为

"C:\cygwin64\bin\env.exe" CHERE_INVOKING=1 /bin/bash.exe -l

"C:\cygwin64\bin\env.exe" CHERE_INVOKING=1 /bin/bash.exe --login

PHPStorm Cygwin Terminal

请务必通过单击终端对话框左上角的红色X 关闭当前打开的终端窗口,然后重新打开它。 Close Terminal

现在再次运行该命令应该如下所示: Cygwin After Switch

有关详细信息,请参阅Cygwin终端中的man bash

更新

根据您对WAMP安装的评论。您需要在Cygwin中安装PHP才能正常运行,这将允许使用posix系列函数并为您的PHP环境模拟Linux发行版。这通常是使用Cygwin的原因。

您打算如何在PHP中使用Cygwin?

问题是Cygwin正在使用Windows PHP可执行文件,并且Symfony控制台组件StreamOutput将其检测为PHP的Windows实例,而不是Cygwin / Linux,以便使用posix_isatty。< / p>

以下是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;
}