如何在emacs中添加下级方案(REPL)?

如何在emacs中添加下级方案(REPL)?,emacs,scheme,chicken-scheme,Emacs,Scheme,Chicken Scheme,我使用的是Chicken scheme。我使用m-x run scheme启动scheme repl,然后使用C-C-l之类的东西来测试我的工作 然而,这是一场噩梦。事情通常是这样的: > (+ 1 (* 2 3) 4) 而不是期望的: > (+ 1 (* 2 3) 4) 我怎样才能轻松解决这个问题?我知道我可以用geiser做一只鸡,但这会破坏键绑定,我真的不想让事情变得更复杂。我只想在按enter键时正确缩进,就像在我的非repl缓冲区中

我使用的是Chicken scheme。我使用
m-x run scheme
启动scheme repl,然后使用
C-C-l
之类的东西来测试我的工作

然而,这是一场噩梦。事情通常是这样的:

> (+ 1 
(* 2
3)
4)
而不是期望的:

> (+ 1
     (* 2
        3)
     4)
我怎样才能轻松解决这个问题?我知道我可以用geiser做一只鸡,但这会破坏键绑定,我真的不想让事情变得更复杂。我只想在按enter键时正确缩进,就像在我的
非repl
缓冲区中一样,仅此而已


我只想用最简单的方法得到一些好的缩进,比如lisp标准。我想补充一点,我编辑文件的缓冲区完全正常,只是
repl
不起作用。

绑定
RET

(defun comint-send-input-indent ()
  (interactive)
  (let ((parens (or (car (syntax-ppss)) 0)))
    (if (zerop parens)
        (comint-send-input)
      (newline-and-indent))))

正如所发现的,这很奇怪:我有一个默认的盖瑟设置,在
C-j
上,所有东西都正确缩进。你使用的是什么版本的Emacs和Geiser?@mobiuseng我没有使用Geiser。我已经安装了geiser并尝试了它,但正如我所说的,虽然它修复了压痕,但它会产生额外的问题。对盖泽的修复也可以。我与geiser之间的问题是,我似乎无法将文件加载到geiser。有些键绑定也会改变,但我可以接受。基本上,如果我通过geiser运行scheme并执行
Eval buffer
我将得到消息“没有geiser REPL for this buffer”,如果这个消息是可修复的:您只需要告诉geiser通过
C-C-s Chicken对打开的文件(buffer)使用Chicken(在我的情况下,它默认使用Guile)(您可以在Geiser设置中设置默认方案实施,请查看其文档)。当您运行
M-x run chicken
时,此缓冲区将连接到chicken REPL。@mobiuseng当我
Eval buffer And go
时,它似乎不起作用。所有定义都没有绑定。我通常只执行
geiser Eval buffer
C-C-b
。但是
C-C M-b
也可以(评估缓冲区后,检查迷你缓冲区中是否有回显消息)。如果使用模块,则需要切换到模块
C-C-a
,或在使用内部标识符之前从中导入导出的名称。