如何重置/清除erlang终端

4

我想要重置命令提示符,忘记所有变量并从第一行开始重新启动命令提示符。
我知道以下内置函数:

f().                      %% forget all
io:format("\e[H\e[J").    %% "clear screen" and moving cursor to the begin of the line

但是,当我输入以下命令时,它会忘记所有变量,但它不会“重置”屏幕,只是清除屏幕,就像终端中的clear命令一样。
在Linux中,我只需键入reset,但我找不到erlang的等效命令或内置函数来执行此操作。
我还尝试了io:format(os:cmd("reset")).,但我收到了错误消息。
我的解决方法是退出erlang终端,然后重新打开它,但我相信有更简单的方法。
5个回答

12
清除 Erl shell

io:format(os:cmd(clear)).


8

大多数类Unix系统中使用的终端都支持VT100 硬件复位 转义序列。你可以在程序中像这样使用它:

io:format("\ec").

那是代替

io:format("\e[H\e[J").    %% "clear screen" and moving cursor to the begin of the line

虽然做两者都不会有坏处。此外,它不会影响您的变量,所以您仍然会这样做。
f().                      %% forget all

结合这些:

f().                      %% forget all
io:format("\ec").
io:format("\e[H\e[J").    %% "clear screen" and moving cursor to the begin of the line

应该是您预期的结果。


8

一个有点 棘手 的方法是通过按下ctrl-g然后输入s, c来启动新的shell。

$ erl
Erlang/OTP 18 [erts-7.3] [source-d2a6d81] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.3  (abort with ^G)
1> A = 1.
1
2>
User switch command
 --> s
 --> c
Eshell V7.3  (abort with ^G)
1> A.
* 1: variable 'A' is unbound
2>

当然,这并不能清除屏幕。你需要使用自己的控制台机制来实现(我在OSX上使用iTerm,只需按下cmd-k即可)。

2
您可以使用 k 来终止原始 Shell。因此,它是 ^G k⏎ s⏎ c⏎。 - Hynek -Pichi- Vychodil

1

正如@Brujo Benavides之前提到的那样。做法是退出当前的erl shell并启动一个新的shell。您可以使用halt().函数,这个函数比较简单。


0

或者进行更彻底的清除。这将清除您终端的缓冲区:

io:format("\033\143").

这相当于以下任一Shell命令之一:

printf "\033\143"

tput reset

后者需要你安装ncurses


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接