从Emacs中执行Scala代码

时间:2014-03-29 20:24:09

标签: scala emacs read-eval-print-loop

Scala REPL非常适合短表达式,但多行表达式很难编辑,特别是如果某处出现语法错误,则需要逐行重新发布语句。

另一方面,Emacs scala-mode2看起来不错,如果我可以选择缓冲区的一个区域并将其发送到Scala REPL,并在迷你缓冲区中查看结果,那就太棒了。

这可能吗?谷歌搜索没有产生任何积极的答案。 或者你认为这会是一个有用的功能吗?

如果我要实现这个,那么最好的方法是什么?我想我可以在后台运行Scala REPL,并通过Emacs中的std输入/输出与它进行交互。

1 个答案:

答案 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)