1

我设置了一个 vim 函数,可以在其中突出显示一行文本并在 clojure 中执行。这是功能:

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

这样做的问题是启动速度很慢,而且因为每次运行它都会产生一个新的 clojure 会话,所以我无法调用以前运行的函数。理想情况下,我希望运行一个隐藏的 repl,我可以从 vim 发送输入并从中检索输出。我了解了 gnu screen 并认为它可以帮助我,但我不知道如何将输入从一个屏幕窗口发送到另一个屏幕窗口。

为了澄清我的问题,请使用这行 clojure:

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

我希望能够在 vim 中突出显示这一行并在运行的 repl 中执行。我希望能够调用下面的行并让它在同一个 repl 中执行:

(add2 4 5)

之后,我希望能够获得函数的输出。

所以,基本上,我的问题是,我如何将输入从一个屏幕窗口发送到另一个?

4

4 回答 4

3

Jake McCrary 的建议是一个很好的建议。还有一些其他可用的脚本,可能基于相同的想法:

VimClojure,它说它确实“在 vim 缓冲区中复制”

slimv,特别支持 Clojure

Gorilla,我认为上面的 VimClojure 是基于 Gorilla

我不知道 VimClojure 是否真的做了你想要的,将结果从 Screen 发送回 Vim 中的缓冲区。我认为,一种方法是使用 Vim 的客户端-服务器功能来解决问题,可能使用 --remote-send 标志。看:

:h client-server
:h --remote-send
于 2010-12-01T00:04:16.900 回答
2

找到了我要找的东西。您可以从终端执行此操作,以将字符串直接发送到屏幕窗口的标准输入:

$ screen -X stuff "ls -l\015" # \015 sends a carrige return.
于 2010-12-02T04:11:11.927 回答
2

我没有确切的答案,但可能值得看一下 slime.vim 并看看是否可以从中学到任何东西。

关于它的博客文章

vim.org 上的脚本

于 2010-11-30T20:46:14.240 回答
0

您可能还对 Conque 感兴趣http://code.google.com/p/conque/

我将它用于 Scala

于 2010-12-30T20:38:28.823 回答