Scala REPL非常适合短表达式,但多行表达式很难编辑,特别是如果某处出现语法错误,则需要逐行重新发布语句。
另一方面,Emacs scala-mode2看起来不错,如果我可以选择缓冲区的一个区域并将其发送到Scala REPL,并在迷你缓冲区中查看结果,那就太棒了。
这可能吗?谷歌搜索没有产生任何积极的答案。 或者你认为这会是一个有用的功能吗?
如果我要实现这个,那么最好的方法是什么?我想我可以在后台运行Scala REPL,并通过Emacs中的std输入/输出与它进行交互。
答案 0 :(得分:0)
如果有人感兴趣,下面的Emacs脚本将评估Scala REPL中的区域。
(defun eval-scala (start end)
(interactive (list (point) (mark)))
;; start scala if it hasn't started yet
(unless (get-process "scala-repl")
(let ((process-connection-type nil)) ; use a pipe
(start-process "scala-repl" "*scala*" "scala"))
(set-buffer "*scala*")
(special-mode)
)
;; execute
(process-send-region "scala-repl" start end)
(process-send-string "scala-repl" "\n")
;;display buffer
(display-buffer
(get-buffer "*scala*")
'((display-buffer-reuse-window
display-buffer-pop-up-window
display-buffer-pop-up-frame)
(reusable-frames . 0)
(window-height . 8) (window-width . nil)
)
)
)
将上述eval-scala
功能绑定到您首选的快捷键,例如
(global-set-key (kbd "C-e") 'eval-scala)