2

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

它工作得很好,但颜色不起作用。例如,我没有?[32m NameName绿色着色。

我尝试了几件事,例如添加插件 Grep Console 以支持 ANSI Color,但没有奏效。

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

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

PS我在Windows 10上。

编辑

当我/usr/bin/which php在 PHPStorm 终端中进行操作时,我得到/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。但主要问题仍然存在。

4

2 回答 2

7

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

ANSICON 支持

首先下载并安装ANSICON

  • 将 Windows 二进制文件 (x86 或 x64 目录内容)提取到您的$PATH( D:\wamp\bin\php\php7.0.0)
  • 可选择ansicon -i从 Windows 命令提示符运行,以允许您使用ANSICON将 ansi 颜色支持添加到 Windows 命令提示符。

接下来你需要ANSICON为 PHPStorm 终端包装

"X:\path\to\ansicon.exe" -p "C:\cygwin64\bin\env.exe" CHERE_INVOKING=1 /bin/bash.exe

Ansicon 包装器

注意:使用-lor --login,如原始答案中所述,将添加/usr/binand并/usr/local/bin导致$PATH终端使用 Cygwin PHP 安装,从而不需要 ANSICON。

接下来在您的~/.bashrc文件中,您需要在文件底部添加。

export ANSICON=true

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

echo export ANSICON=true >> ~/.bashrc

这将确保 Symfony 能够找到具有不同 Windows 版本的 ANSICON 环境变量。

接下来重新启动 PHPStorm 并打开终端进行测试。 作曲家安西康

于 2016-08-18T16:09:16.780 回答
2

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

添加交换机之前: 切换前的 Cygwin

完整路径应该是

"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 终端

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

现在再次运行命令,它应该如下所示: 切换后的 Cygwin

有关更多信息,请参阅man bashCygwin 终端。


更新

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

您打算如何将 Cygwin 与 PHP 一起使用?

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

下面是 Symfony Console 用来向终端渲染颜色输出的代码示例。

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;
}
于 2016-08-12T17:59:36.837 回答