我是Ocaml的新手,只是用emacs,merlin和flycheck设置我的开发环境.除了一件事之外,一切都或多或少地起作用:merlin似乎无法识别同一项目中模块之间的依赖关系.
例如,我有一个包含两个模块的测试项目:main.ml和awesome.ml.
这是我的main.ml引用第二个模块awesome.ml
(* main.ml *)
open Core
module A = Awesome
let _ =
Printf.printf "hello \n Converted to string we get: %s\n"
(A.str_of_t (A.succ A.one_t));
Run Code Online (Sandbox Code Playgroud)
这是awesome.ml:
(* awesome.ml *)
type t = int
let one_t = 1
let succ i = i + 1
let str_of_t = string_of_int
Run Code Online (Sandbox Code Playgroud)
当我发送main.ml缓冲区以使用utop-eval-buffer函数评估到utop时,我收到一个错误:"错误:未绑定的模块很棒"
我在项目的根目录中有.merlin,它有S指令.我知道它是由梅林发现的,因为它没有抱怨"开放核心"
S src
PKG core lwt ounit
B _build/src
B +threads
Run Code Online (Sandbox Code Playgroud)
这是我的_tags:
<src/**>: include
<src/**>: package(oUnit), package(core)
true:thread
Run Code Online (Sandbox Code Playgroud)
ocamlbuild的常规项目编译工作正常,没有错误.这是Makefile
## Makefile
default: main
main: main.native
test: test.native
%.native:
ocamlbuild …Run Code Online (Sandbox Code Playgroud) 我正在尝试为OCaml进行自动完成.我喜欢使用Vim,我找到了这个插件:
https://github.com/the-lambda-church/merlin
我使用OPAM安装它并添加了所需的行以将其加载到我的.vimrc
我确保OPAM bin文件夹(包含ocamlmerlin)在我的.profile文件中,并检查我是否可以从终端访问它,对于vim,我使用"Ctrl-r = $ PATH"打印了PATH变量,它显示了它包含OPAM bin文件夹.
它仍然不起作用,我不知道还有什么可以使其工作.我得到了语法高亮,但无论如何都没有merlin.我希望自动完成工作.
如果我按Ctrl-N显示完成建议我得到"正常"的vim完成,这基本上只是文档中提到的单词列表.
检查启动日志文件,我可以看到Vim确实加载了merlin:
chdir(/home/incraved/.opam/system/share/ocamlmerlin/vim/plugin)
fchdir() to previous dir
sourcing "/home/incraved/.opam/system/share/ocamlmerlin/vim/plugin/merlin.vim"
finished sourcing /home/incraved/.opam/system/share/ocamlmerlin/vim/plugin/merlin.vim
Searching for "/home/incraved/.opam/system/share/ocamlmerlin/vimbufsync/plugin/**/*.vim"
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我用opam安装了Coq,并想制作一个Coq插件。我设法使用编译了一些插件示例coq_makefile,但是如果我可以在vim中使用merlin来获取类型信息并完成Coq库,那将是很棒的。
有没有一种方法可以将Coq库添加到ocamlfind?