【问题标题】:Garbage output instead of colors in vscode with gitbash and elixir带有 gitbash 和 elixir 的 vscode 中的垃圾输出而不是颜色
【发布时间】:2019-07-13 12:05:49
【问题描述】:

我开始学习elixir,成功让iex有ansi颜色。问题是在 vscode 的终端中,输出看起来像垃圾:

$ iex
Interactive Elixir (1.8.1) - press Ctrl+C to exit (type h() ENTER for help)
?[G?[36miex>?[0m?[0m
  • Windows 10 专业版
  • vscode 1.36.1
  • cmder (conemu 161206)
  • 灵药1.8.1

当我从 cmder 运行 git-for-windows 的 bash 时,它运行良好,颜色也很好。

当我在 vscode 中运行与集成终端相同的 bash 时,会打印 ansi 代码而不是颜色。

我从来没有遇到过 nodejs 或其他任何问题,只有与 elixir 相关的东西崩溃了。

这两者都是一样的,我不知道它是否仍然重要:

$ elixir -e "IO.inspect :io.columns"
{:error, :enotsup}

有没有人知道 vscode 的不同之处是什么让相同的事情以不同的方式工作?

【问题讨论】:

    标签: visual-studio-code elixir git-bash elixir-iex


    【解决方案1】:

    all Windows consoles 不支持此ansi escape code,尤其是 VSCode 中的嵌入式 CMD(详见Microsoft/WSL issue 1173)。
    即使在 VSCode 完成的 git bash 会话中,该 bash 会话仍将在 CMD 之上运行,并且不是像 cmder/ConEmu 这样的混合终端,能够解释 ANSI X3.64 / xterm 256 颜色通过hooking Windows API

    作为shown here,有一个-elixir ansi_enabled false 将允许elixir输出颜色转义码。
    试试set it in the :elixir application,就像opposite of this example一样。

    Application.put_env(:elixir, :ansi_enabled, false)
    

    另一种方法是使用基于 ConEmu/cmder 的 VSCode 控制台,例如 ipatalas.vscode-conemu

    在那种控制台中,ANSI 颜色转义码应该可以正常显示。


    OP indriq 在 cmets 中确认:

    • 想要禁用颜色
    • 使用ansicon,又是一个注入程序:

    ANSICON 将 DLL 注入到进程中,挂钩它的函数。
    三种方法之一用于注入 DLL。

    • LoadLibrary 通过CreateRemoteThread 表示正在运行的进程。
    • LdrLoadDll 通过CreateRemoteThread 用于 64 位 .NET AnyCPU 进程。
    • 直接将 DLL 添加到导入表中,否则。

    你可以see it setup with VSCode here:

    {
        ...
    
        "terminal.integrated.shell.windows": "C:\\Program Files\\ANSICON\\x64\\ansicon.exe",
        "terminal.integrated.shellArgs.windows": [
            "C:\\Program Files\\Git\\bin\\sh.exe",
            "--login",
            "-i"
        ]
    }
    

    【讨论】:

    • 1.我知道它们是我在帖子中提到的 ansi ecape 代码。 2.我不使用cmd,我使用git bash,帖子里也有 3.我不想关闭它们,我想让它们在vscode中的工作方式与它们在同一个bash中的工作方式相同使用cmder 4。这是垃圾,因为它们在这种形式下没用:)
    • @indriq 对不起,我的回答开头很抱歉,我已经重写它以留下(供其他读者)指向这些转义码的链接。我已经用另一种方法完成了上述答案,这可能使您能够在 Elixir 脚本执行中保持这些颜色处于活动状态。
    • 为什么 ansi 颜色在同一个 bash 中的 nodejs 应用程序中起作用?
    • 我知道这个插件,但它会打开一个新窗口(它对我也适用于 cmder)。我的问题是集成终端,它在 vscode 内的面板中打开。
    • @indriq 关于nodejs,我将不得不检查npmjs.com/package/ansi-colorsgithub.com/chalk/chalknpmjs.com/package/colors 如何显示它们的颜色,但并不是所有的 VSCode 部分都支持所有 ansi 颜色,比如高强度的(github.com/microsoft/vscode/issues/21423#issuecomment-373966489)。这对我自己的小实用程序(与 nodejs 无关)github.com/VonC/batcolors 是有问题的,因为我使用它们(github.com/VonC/batcolors/blob/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多