如何清除Haskell的终端屏幕?


93

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


2
您能否更清楚地了解Haskell程序中使用的是哪种用户界面系统?您是说您只是在向stdin / stdout读写文本吗?如果是这样的话,那些没有“屏幕”的隐含概念。如果您希望程序在假定stdin / stdout连接了终端的情况下工作,那么您应该对程序进行编码以使用某些终端控制程序包,例如指示的@ZackS的答案。
MtnViewMark 2010年

2
请选择正确的答案。人们必须仔细阅读所有答案!
Shishir Gupta

Answers:


195

:! 运行shell命令
:! Windows下的CLS
:! 在Linux和OS X下清除


2
ghci有任何备忘单吗?
tugberk 2014年

2
@Peter我最好的猜测是,因为他们不认为这是一个haskell解决方案(理所当然;它仅适用于GHCi),对他们不起作用(依赖于shell),或者他们只是认为ZachS的答案更好。:! cls对于我的用例来说已经足够了,但对于发问者的情况却不起作用,因为发问者未使用GHCi。
John Dvorak

58

这是您可能正在寻找的:

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

您可以在Hackage中找到它,并使用安装cabal install ansi-terminal。它特别具有清除屏幕,显示颜色,移动光标等功能。

使用它来清除屏幕很容易:(这与GHCI一起使用)

import System.Console.ANSI

clearScreen


4
这是正确的答案。不过,请尝试在系统的软件包管理器中查找软件包,因为cabal通常不起作用,并且不提供卸载命令。
Evi1M4chine 2014年

13

在了解ANSI转义序列的终端上(我相信Unix / Linux系统中的每个术语),您都可以使用以下命令轻松完成:

clear = putStr "\ESC[2J"

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

但是我认为这不适用于Windows Shell。




5

在Windows上,一种快速的方法是

import System.Process

clear :: IO ()
clear = system "cls"

对于我和Linux系统而言,这是最干净的解决方案system "clear
伊恩·J·里德


0

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

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.