1

我试图在 ubuntu 上玩泛音,但我无法在 Vim 中评估一些泛音的代码。

:Eval 适用于 clojure 代码;我在vim中试了一下(lein项目目录下的一个clj文件),ex: (+ 1 2 3) => :Eval => 出现在vim窗口底部=> 6,所以没问题。

但是,例如,我尝试过:

(demo(sin-osc)) => :Eval ;(:Require don't change nothing)

它返回:

java.lang.RuntimeException: Unable to resolve symbol: demo in this context, comp
iling:(NO_SOURCE_PATH:1:1)

所以这就是我所做的:

  • 杰克开始了
  • lein repl 在 lein 项目中启动(deps 可以)
  • 在有 lein 的第一个终端中,我开始泛音(使用'overtone.live),这是日志;我有两个错误:

    user=> (use 'overtone.live) --> Loading Overtone... --> Booting internal SuperCollider server... * ERROR: dlsym load err '/home/axxon/workspace/overtone/tutorial/native/linux/ x86_64/libscsynth.so: undefined symbol: load' 找到 10 个 LADSPA 插件 *错误: 打开目录失败 '/home/axxon/.local/share/SuperCollider/synthdefs' JackDriver: 客户端名称是 'SuperCollider' SC_AudioDriver: 采样率 = 44100 ,000000, 驱动程序块大小 = 1024 --> 正在连接到内部 SuperCollider 服务器... --> 已建立连接 JackDriver:最大输出延迟 23.2 毫秒

  • 在这里,在这个窗口中我尝试了(演示(sin-osc))。有用; 我能听到。

  • 很好,但现在我想用 Vim 编写脚本,所以我在 lein 项目目录(/overtone/tutorial)中创建了一个新文件(mytest.clj),我用 Vim 打开它(在另一个窗口中)
  • 在这个空白文件中,我写了和我之前说的一样的东西,(demo(sin-osc)) 并尝试先评估,:Require,它返回了这个:

    (clojure.core/require '用户:重新加载)

    java.io.FileNotFoundException: Could not locate user__init.class or user.clj on 
    classpath: 
    
  • 使用 Eval,它也不起作用。

感谢您的帮助,因为我真的很想使用泛音!

ps:我的 vim 包:

捆绑 'guns/vim-clojure-static'
捆绑 'tpope/vim-fireplace'
捆绑 'tpope/vim-classpath'

编辑:我忘记使用正确的命名空间,在 overtone 的 google 组中,我看到 mytest.clj 必须在项目的 src 目录中。我用 :Require 尝试了这段代码(我在开始 lein 的第一个窗口中停止了泛音):

(ns tutorial.foo
  (:use [overtone.live]))
(definst saw-wave [freq 440 attack 0.01 sustain 0.4 release 0.1 vol 0.4]
      (* (env-gen (lin-env attack sustain release) 1 1 0 1 FREE) (saw freq) vol))
(saw-wave)

,但它返回:

(clojure.core/require 'tutorial.foo :reload)
Erreur détectée en traitant function <SNR>17_Require..fireplace#session_eval..<S
NR>17_eval..7 :
ligne   38 :
E605: Exception non interceptée : Error running Clojure: *** ERROR: open directo
ry failed '/usr/java/packages/lib/amd64'^@*** ERROR: dlsym load err '/usr/lib/jn
i/libswt-gtk-3836.so: undefined symbol: load'^@*** ERROR: dlsym load err '/usr/l
ib/jni/libswt-glx-gtk-3836.so: undefined symbol: load'^@*** ERROR: dlsym load er
r '/usr/lib/jni/libswt-webkit-gtk-3836.so: undefined symbol: load'^@*** ERROR: d
lsym load err '/usr/lib/jni/libswt-atk-gtk-3836.so: undefined symbol: load'^@***
 ERROR: dlsym load err '/usr/lib/jni/libswt-pi-gtk-3836.so: undefined symbol: lo
ad'^@*** ERROR: dlsym load err '/usr/lib/jni/libswt-cairo-gtk-3836.so: undefined
 symbol: load'^@*** ERROR: dlsym load err '/usr/lib/jni/libswt-awt-gtk-3836.so: 
undefined symbol: load'^@*** ERROR: dlsym load err '/usr/lib/jni/libswt-gnome-gt
k-3836.so: undefined symbol: load'^@#^@# A fatal error has been detected by the 
Java Runtime Environment:^@#^@#  SIGSEGV (0xb) at pc=0x00007f5d261db671, pid=693
1, tid=140036632291072^@#^@# JRE version: 7.0_25-b30^@# Java VM: OpenJDK 64-Bi
4

2 回答 2

1

我遇到了同样的问题。原来 vim 壁炉插件没有连接到我的 bash repl 会话。我手动建立了连接,之后一切正常。

在您的 lein 会话的顶部,您应该看到有关 repl 会话在哪个端口上运行的详细信息

nREPL server started on port 35182 on host 127.0.0.1

那么你可以通过使用将 vim-fireplace 连接到该 repl 会话

:Connect nrepl://localhost:35182

即使 vim-fireplace 未连接到远程 repl 会话,您仍然可以评估代码的原因(+ 1 2 3)是因为 vim-classpath 将使其回退到仅生成一个新的 clojure 运行时实例来评估该代码。一旦壁炉 repl 连接正常工作,您应该注意到评估代码变得更快,因为它不需要从头开始加载 clojure。

于 2013-11-11T16:03:30.980 回答
-1

确保在 vim 中编辑的文件的命名空间声明中使用 overtone.live,并且 REPL 在单独的终端实例中运行。在 vim 中,保存文件 (:w) 并将光标移动到 ns 声明中。然后点击 gf 打开命名空间的文件。输入 cpR 或 :Require!然后 cpp 或 :Eval 您尝试运行的功能。希望这对你有用!祝你好运。

于 2013-09-22T05:37:11.370 回答