我有一个OCaml程序,我想从Vim打电话。
在我的.vimrc
中,我定义了一个应该执行OCaml字节码的命令:
command! MyCommand call FunctionCallingOCaml()
function! FunctionCallingOCaml()
let scriptPath = $HOME . "/path/to/myOCamlProgram.byte"
let ocamlCmd = "ocamlrun " . scriptPath
execute "!" . ocamlCmd
endfunction
不幸的是,这不起作用;我收到一条错误消息:
致命错误:无法加载共享库dllbin_prot_stubs 原因:dllbin_prot_stubs.so:无法打开共享对象文件:没有这样的文件或目录
我可以毫不拖延地从另一个运行bash的终端执行myOCamlProgram.byte
。
此外,我可以使用ls
调用来自Vim的grep
等shell内置函数和execute
等程序,而不会出现问题。
我的系统:
uname -a
:
Linux marathon 4.12.10-1-ARCH#1 SMP PREEMPT 8月30日星期三12:18:42 CEST 2017 x86_64 GNU / Linux
opam --version
:1.2.2
VIM - Vi IMproved 8.0(2016年9月12日,编译时间为2017年9月19日13:59:47)
答案 0 :(得分:1)
事实证明OPAM在运行Vim的shell中没有正确初始化。 PATH没有包含导致错误的OCaml二进制文件。
作为修复,我调用eval $(opam config env)
来设置环境变量并修改PATH,以便我的Linux安装将从Vim运行OCaml程序:
let ocamlCmd = "eval $(opam config env) && ocamlrun " . scriptPath
execute "!" . ocamlCmd
更好的是,将其添加到.bash_profile
,以便每次登录时都会针对OPAM初始化shell:
. /home/mb/.opam/opam-init/init.sh
shell脚本sources之前的点。