如何通过fireplace.vim使cljs文件在figwheel repl中工作?

5
我有一个关于ClojureScript的项目,使用vim进行代码编辑,因此我想在编辑器内访问repl,这可以使用fireplace.vim进行访问。
如果您有一个全新的平面项目,它可以很好地工作-您只需打开目录,启动clojure repl,在相同的目录中打开vim,创建一个表达式并使用cpp对其求值。

https://youtu.be/vHDLDNoAdLE

但是当我使用figwheel项目时,我想连接到figwheel repl以便从cljs文件中计算某些内容,因此我启动了一个figwheel,最终在端口7888上启动了repl,并使用:Connect命令使用fireplace连接到该repl,它只适用于clj文件,而不适用于cljs。

https://youtu.be/ue42Yh0v6UQ

当我尝试在.cljs文件中评估一个表达式时,Fireplace报错如下:

处理函数37_printop1..37_opfunc[35]..fireplace#client的过程中发现错误: 第10行: E605: 未捕获的异常: Fireplace: 类java.lang.ClassNotFoundException

有人知道如何解决这个问题吗(使用fireplace + .cljs文件)?


不是回答你的问题,但我可以推荐尝试使用SpacemacsClojure layer。它具有出色的Vim绑定,并且Clojure集成可以直接使用。 - user2609980
谢谢您的推荐。我尝试使用了Spacemacs,但我还是更喜欢vim。也许如果我无法解决cljs文件的问题,这将是最后的选择。 - Karen Fisher
3个回答

1
问题出在fireplace.vim插件中,在fireplace.vim的第323行。
let response = connection.eval("((or (resolve 'cider.piggieback/cljs-repl)"

必须是行:
let response = connection.eval("((or (resolve 'cider.piggieback/wrap-cljs-repl)"

由于cider.piggieback在299行定义了wrap-cljs-repl函数:
(defn wrap-cljs-repl [handler]

1

你是否已经"猪背式连接"(在nREPL会话中启用ClojureScript REPL),以将Fireplace连接到Figwheel REPL?

:Piggieback (figwheel-sidecar.repl-api/repl-env)

请查看https://github.com/bhauman/lein-figwheel/wiki/Using-the-Figwheel-REPL-with-Vim#still-in-vim-piggieback-on-clojurescript

ClassNotFound Exception cemmerick.piggieback相关:

您需要在您的project.cljprofiles.clj中包含cemerick.piggieback。请参阅https://github.com/nrepl/piggieback

:profiles {:dev {:dependencies [[com.cemerick/piggieback "0.2.1"]
                                [figwheel-sidecar "0.5.18"]]
                 :repl-options {:nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]}}}

谢谢你的回答!我稍后会深入研究,并希望能够成功报告。 - Karen Fisher
在执行命令:Piggieback (figwheel-sidecar.repl-api/repl-env) 后,我收到了 ClassNotFound 异常 cemmerick.piggieback。可能的原因是什么? - Karen Fisher
谢谢,但对我没有用。我仍然在使用 cemmerick.piggieback 时遇到错误,不知道该往哪里走... - Karen Fisher
我不明白为什么它会抱怨 cemerick.piggieback,而我已经有了 cider.piggieback? - Karen Fisher
也许可以使用cemerick.piggieback。请参见https://github.com/bhauman/lein-figwheel/wiki/Using-the-Figwheel-REPL-with-Vim#setup:`[com.cemerick/piggieback "0.2.1"][cemerick.piggieback/wrap-cljs-repl]`。我已更新答案。 - user2609980

1

以下是我采取的步骤序列,以使figwheel REPL与vim fireplace一起工作:

  1. 将以下依赖项添加到/home/{username}/.clojure/deps.edn中:
...
  :aliases {:nrepl
            {:extra-deps
             {nrepl/nrepl {:mvn/version "0.6.0"}
              cider/cider-nrepl {:mvn/version "0.23.0"}
              cider/piggieback {:mvn/version "0.4.2"}}}}
...

将这些添加到项目中:
...
 :deps  {com.bhauman/figwheel-main {:mvn/version "0.2.3"}
         figwheel-sidecar          {:mvn/version "0.5.19"}}
...
  1. 使用下面的命令在终端中运行项目:
clj -R:nrepl -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware cider.piggieback/wrap-cljs-repl]"

  1. Connect to an nREPL from vim using:
:Connect nrepl://localhost:{port}

启动Figwheel REPL并连接到它:
:CljEval (do (require 'figwheel.main.api) (figwheel.main.api/start "dev"))
:CljEval (do (use 'figwheel.main.api) (figwheel.main.api/cljs-repl "dev")) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接