2010-11-30 45 views
1

我有一個vim函數,可以突出顯示一行文本並在clojure中執行。這裏的功能:發送輸入到vim的屏幕窗口

function! Clojure_execline() 
    let cl = (getline(line("."))) 
    // ... 
    exec 'clojure -e "' . cl . '"' 
endfunction 

這裏的問題是,它的緩慢啓動,因爲它產生每次運行它的時候一個新的Clojure會議,我不能調用一個函數我以前跑。理想情況下,我想要一個隱藏的repl來運行,我可以從vim發送輸入並從中檢索輸出。我瞭解了gnu屏幕,並認爲它可以幫助我,但我不知道如何將輸入從一個屏幕窗口發送到另一個屏幕窗口。

爲了澄清我的問題,走這條線的Clojure的:

(defn add2 [x y] (+ x y)) 

我希望能夠突出VIM這一行,並在運行REPL執行。我希望能夠調用下面的線,並把它在同一個REPL執行:

(add2 4 5) 

之後,我希望能夠得到函數的輸出。

所以,基本上,我的問題是,如何將輸入從一個屏幕窗口發送到另一個?

回答

2

找到我正在尋找的東西。您可以從終端執行此直接發送一個字符串到屏幕窗口的標準輸入:

$ screen -X stuff "ls -l\015" # \015 sends a carrige return. 
3

傑克McCrary的建議是一個很好的一個。也有一些其他的腳本中使用,可能是基於同樣的想法:

VimClojure表示,它確實 「REPL在Vim緩衝區」

slimv,專門支持Clojure的

Gorilla,我覺得VimClojure,上面是根據大猩猩

我不知道VimClojure是否真的做到了你想要的,將結果從屏幕返回到Vim中的緩衝區。我認爲一種方法是使用Vim的客戶端 - 服務器功能來完成某些功能,可以使用--remote-send標誌。參見:

:h client-server 
:h --remote-send 
+0

vimClojure看起來接近到我想要的。我會看看它看到他們的方法。 – 2010-12-01 01:00:30