2014-03-29 26 views
1

Scala REPL非常適合短語表達,但多行表達式很難編輯,尤其是在某處出現語法錯誤的情況下,它需要逐行重新發布語句。在Emacs中執行Scala代碼

另一方面,Emacs scala-mode2看起來不錯,如果我可以選擇一個緩衝區並將其發送到Scala REPL,並在一個小緩衝區中查看結果,那將會非常棒。

這可能嗎?谷歌搜索沒有產生任何積極的答案。 或者你認爲這將是一個有用的功能?

如果我要實現這個,最好的方法是什麼?我想我可以在後臺運行一個Scala REPL,並通過Emacs的std輸入/輸出與它進行交互。

回答

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) 
+0

遠更好地使用:(EVAL-後負荷 'ensime '(定義鍵ensime模式映射(KBD 「」)「EVAL-階)) – user6273920