如何重置/清除erlang终端

iyr7buue  于 2022-12-08  发布在  Erlang
关注(0)|答案(5)|浏览(173)

我尝试重置提示符,忘记所有变量,从第1行开始提示符〉
我知道以下内置函数

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终端,然后重新打开它,但我相信有更简单的方法来完成这一任务。

yhxst69z

yhxst69z1#

清除erl shell
io:format(os:cmd(clear)).

b09cbbtk

b09cbbtk2#

一个有点“棘手”的方法是通过按ctrl-g,然后按sc来启动一个新的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

cdmah0mi

cdmah0mi3#

你在类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

应该是你想要的。

jtjikinw

jtjikinw4#

正如@ BrujoBenavides前面提到的,方法是退出当前的erl shell并启动一个新的,你可以使用halt().函数,它不太复杂。

3pmvbmvn

3pmvbmvn5#

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

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

相当于以下任一shell命令:
第一次
后者要求您安装了ncurses

相关问题