【问题标题】:How Can We Clear the Screen in Iex on Windows我们如何在 Windows 上清除 Iex 中的屏幕
【发布时间】:2015-09-03 03:22:48
【问题描述】:

请问我们如何在 Windows 上清除 Iex 中的屏幕

Iex 帮助中记录的方法不起作用:

  • clear/0 — 清屏

This StackOverflow Answer 在 Windows 中也不起作用。

【问题讨论】:

  • 在 Windows 上的 Elixir/Erlang 仿真器外壳中,您确实会收到警告:““无法清除屏幕,因为此外壳上未启用 ANSI 转义码””
  • @GavinBrelstaff 也无法清除 Elixir -werl GUI 上的屏幕

标签: windows elixir


【解决方案1】:

是的,据我所知,我们无法在 Windows 上清除它。如果我们可以输出到 IO 设备以清除 Windows 上的屏幕,我很想知道并将此功能添加到 Windows 中。 :)

【讨论】:

  • 在常规的 Windows 控制台上,我们使用 CLS
【解决方案2】:

您最好的选择(如果这对您来说是一个真正的问题而不是烦恼)是使用支持 ANSI 转义序列的备用 Windows shell。请参阅this S O question,了解为什么不能在 Windows Cmd Shell 中简单地使用 ANSI Escape 序列。一种支持 ANSI 的命令 shell 替代方案是 ConEmu。在您的机器上配置 ConEmu 留给读者作为练习。

【讨论】:

  • 链接的答案建议使用 ANSICON,我认为它比 ConEmu 更简单。仅供参考,ConEmu 是终端/控制台替代品,而不是外壳,它部分替代的 Windows 控制台(conhost.exe)也不是外壳。 cmd.exe 是一个shell,但它与渲染控制台窗口无关。与任何控制台程序一样,它获取附加的 conhost.exe 实例的句柄,并且其StandardInputStandardOutputStandardError 的标准句柄默认为控制台的输入缓冲区和屏幕缓冲区。
  • @eryksun 你是对的——我对什么是外壳和什么是终端/控制台不是很精确。
  • 我在 ConEmu 中使用 iex,但仍然收到“未启用 ANSI 转义码”消息,即使它们显然是(我有一个彩色 iex 提示符。)
  • 我还在控制台和 GitBash 中收到“未启用 ANSI 转义码”消息。
  • @jwfearn 你收到来自 Iex 的消息了吗? Iex 检查操作系统,因此拥有 Conemu 没有任何区别。
【解决方案3】:

您可以在 Windows 上通过支持它们的控制台(如 ConEmu 或 Windows 10 控制台)直接在 iex 中使用 ANSI 代码。

这将清除iex中的屏幕:

iex> IO.write "\e[H\e[J"; IEx.dont_display_result

解释:

  • IO.write 在没有换行符的情况下输出到控制台
  • \e[ 是 ANSI CSI codes 的前缀
  • H 是不带参数的 CSI CUP – 光标位置代码,默认情况下将光标移动到第 1 行第 1 列
  • J 是不带参数的 CSI ED – 擦除显示代码,默认情况下从当前光标位置清除屏幕
  • 清屏后IEx.dont_display_result防止IO.write:ok结果显示

您还可以使用IO.ANSI 而不是原始转义码来清除屏幕:

iex> IO.write [IO.ANSI.home, IO.ANSI.clear]; IEx.dont_display_result

这基本上就是clear/1implemented

【讨论】:

    【解决方案4】:

    我发现这是可能的,因为 Windows 10 中的本机终端支持 ANSI 颜色和转义序列。唯一要做的就是在iex shell 中启用它。

    根据https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/io/ansi.ex#L41,此选项是可配置的。作为一种快速解决方案,只需在您的 iex 会话中输入以下代码:

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

    为了使其永久化,您可以在~/.iex.exs 文件(https://hexdocs.pm/iex/IEx.html#module-configuring-the-shell)中配置iex shell。只需将以下内容粘贴到文件中:

    IEx.configure [colors: [enabled: true]]

    【讨论】:

    • 您可能希望在 Elixir 的 github 上提交问题,让他们知道 Windows 10 现在支持此功能。他们可能希望改变行为。
    • 问题是本机终端中的 ANSI 支持仅在特定的 Windows 10 更新中实现,我不确定是否可以默认为所有 Windows 安装启用它。我认为,应该由用户在iex 中启用ANSI
    • 我刚刚在他们的 github 上检查了已关闭的问题。他们已经在 master 分支中检测到了这个 ANSI 支持。
    【解决方案5】:

    将以下内容添加到您的主目录中的~/.iex.exs -- 如果该文件不存在,请创建它并添加以下内容。

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

    编辑:请注意,您需要一个支持此功能的术语,ConEmu、Cmder 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多