0

假设我尝试在 MIT Scheme 的 REPL 中使用未定义的变量:

1 ]=> blablabla

;Unbound variable: blablabla
;To continue, call RESTART with an option number:
; (RESTART 3) => Specify a value to use instead of blablabla.
; (RESTART 2) => Define blablabla to a given value.
; (RESTART 1) => Return to read-eval-print level 1.

2 error> 

这会自动将我带入调试器。要退出调试器,我必须输入(restart 1). 是否有不涉及仅输入 11 个字符以退出调试器的替代方法?这三个选项都涉及输入 11 个字符,这有点愚蠢。

4

2 回答 2

1

根据 Flux 的回答,按CTRLC 两次将适用于mit-scheme,但在运行时无效rlwrap

为了使rlwrap关于CTRLCCTRLG

  • 使用-W( --polling) 选项:rlwrap -Wrlwrap每 40 毫秒唤醒一次以检查客户端是否已更改其终端设置(在您的情况下,它的中断字符
  • 添加几行到你的.inputrc
$if mit-scheme
  "\C-c" rlwrap-direct-keypress
  "\C-g" rlwrap-direct-keypress
$endif

这些行将告诉rlwrap(在换行时mit-scheme)传递CTRLCCTRLG甚至在行编辑的中间时也是如此。

通过这两个调整,我无法再区分 rlwrapped 和 unwrapped 之间的中断行为mit-scheme

-W需要rlwrap>= 0.41, rlwrap-direct-keypress>= 0.43

要更深入地解释为什么这样做(以及为什么需要选项和.inputrc条目),请参阅Github 上的这个 rlwrap 问题

于 2021-02-14T10:42:39.063 回答
0

根据 MIT Scheme 用户手册中关于中断 REPL的部分:

  • 抄送抄送
  • CG

中止当前正在运行的任何 Scheme 评估并返回到顶级 REPL。如果没有运行评估,这相当于评估(cmdl-interrupt/abort-top-level)

所以有两种方法可以快速退出调试器:

  • CtrlcCtrlcrlwrap mit-scheme— 不幸的是,当使用带有 rlwrap(即)的 MIT 方案时,这种方法不合适。在调试器中时,rlwrap不知何故会导致第二个Ctrlc被忽略。

  • Ctrlg— 这与 rlwrap 配合得很好,并且比上面需要的按键更少。

于 2021-02-10T02:38:15.197 回答