【问题标题】:How do I clear the terminal screen in Haskell?如何清除 Haskell 中的终端屏幕?
【发布时间】:2011-01-29 04:00:02
【问题描述】:

当我的用户从我的应用程序菜单中选择了一个选项后,我如何清除终端屏幕?

【问题讨论】:

  • 您能否更清楚地了解您在 Haskell 程序中使用的用户界面系统?您的意思是您只是在标准输入/标准输出中读取和写入文本吗?如果是这样,那些没有“屏幕”的隐含概念。如果您希望您的程序在假设有一个终端连接到标准输入/标准输出的情况下工作,那么您应该对您的程序进行编码以使用一些终端控制包,例如 @ZackS 的答案。
  • 请选择正确答案。人们必须经历所有的答案!

标签: haskell terminal ghci


【解决方案1】:

在 Unix 系统上,您可以执行 System.system "clear",它只是调用命令行实用程序 clear。对于不依赖于外部工具的解决方案,您需要一个抽象不同终端类型的库,例如 ansi-terminal

【讨论】:

【解决方案2】:

这可能是你要找的:

ansi-terminal: 简单的 ANSI 终端支持,与 Windows 兼容

您可以在 Hackage 中找到它并使用 cabal install ansi-terminal 进行安装。它具体有清屏、显示颜色、移动光标等功能。

用它来清屏很简单:(这是用GHCI)

import System.Console.ANSI<br><br>clearScreen

【讨论】:

  • 这是正确答案。不过,请尝试在系统的包管理器中查找该包,因为 cabal 通常无法使用它并且不提供卸载命令。
【解决方案3】:

:! 运行 shell 命令
:! windows下的cls
:!在 linux 和 OS X 下清除

【讨论】:

  • 有没有 ghci 的备忘单?
  • @Peter 我最好的猜测是因为他们不认为这是一个 haskell 解决方案(理所当然;它只适用于 GHCi),它不适用于他们(依赖于 shell)或者他们只需考虑 ZachS 的答案更好。 :! cls 对于我的用例来说已经足够了,但不适用于提问者的情况,因为提问者没有使用 GHCi。
【解决方案4】:

在理解 ANSI 转义序列(我相信 Unix/Linux 系统中的每个术语)的终端上,您可以简单地使用:

clear = putStr "\ESC[2J"

2 清除整个屏幕。如果要从光标到屏幕末尾或从光标到屏幕开头清除,可以分别使用01

但我认为这在 Windows shell 中不起作用。

【讨论】:

    【解决方案5】:

    在 Windows 上的快速方法是

    import System.Process
    
    clear :: IO ()
    clear = system "cls"
    

    【讨论】:

    • 这对我来说是最干净的解决方案,对于 Linux 系统,请使用 system "clear
    【解决方案6】:

    在 Linux(至少是 Ubuntu)下,这是我用于清除终端的代码:

    import qualified System.Process as SP
    
    clearScreen :: IO ()
    clearScreen = do
      _ <- SP.system "reset"
      return ()
    

    【讨论】:

      【解决方案7】:

      只需按 Ctrl+L(适用于 Windows)

      【讨论】:

      • 也适用于 macOS
      • 同样适用于 ubuntu + zsh。
      【解决方案8】:

      在 Windows 上,对 Haskell 命令提示符终端使用 Ctrl + L。并且,对于 GUI,请使用 Ctrl + S

      【讨论】:

        猜你喜欢
        • 2012-04-23
        • 2019-10-29
        • 2016-01-31
        • 1970-01-01
        • 1970-01-01
        • 2011-06-04
        • 2023-01-05
        • 2011-07-19
        • 2016-04-22
        相关资源
        最近更新 更多