我从未使用过 Vi 或 Vim,但它似乎是编辑 OCaml 文件的最佳选择。不幸的是,我迷失了太多需要关心的事情:ocaml-vi-addon、vi-scripts、otags 等。
我打破了最初对 Vim 使用cream的恐惧,但我怀疑是否需要除 vim-scripts 之外的任何包*。
- -> 我用的是 Debian,也许这个信息没用
OCaml 的默认模式就是它的全部。您可以考虑使用以下插件:
https://github.com/scrooloose/syntastic - 语法检查
https://github.com/def-lkb/merlin - 自动完成
https://github.com/jpalardy/vim-slime - repl 集成
将这些行放在你的 ~/.vimrc 文件中:
filetype indent on
filetype plugin on
au BufRead,BufNewFile *.ml,*.mli compiler ocaml
syntax on
然后你会得到一些不错的快捷方式:
\s
在 .ml 和 .mli 文件之间切换\c
评论当前行/选择(\C
取消评论)%
跳转到匹配的 let/in、if/then 等(参见 参考资料:h matchit-install
)\t
告诉你光标下事物的类型(如果你用 编译-annot
)此外,Vim 可以解析编译器的输出并跳转到正确的位置。
出于以下原因,有人希望得到编辑的支持:
对于 1 和 2,默认值应该足够好,尽管有这个 ocp-indent 插件试图做得更好。
对于 3,我求助于语法突出显示,并且不知道什么比 vim 更好。
关于内联调试,我从未设法从命令行使用 ocamldebug,因此从未尝试从编辑器中尝试过。
关于内省,我不能推荐足够多的 annot 程序,它可以作为 vim 插件安装,如 README 中所述。
安装后,您只需两次击键即可获得光标下任何内容的类型,这对于能够推断最复杂类型的语言来说非常方便。
答案已经很老了,我认为这个线程需要更新,因为LSP作为事实上的标准的引入最近彻底改变了旧的文本编辑器(vim、emacs...等)。
当前的state-of-the-art是使用官方的OCaml Language Server: https ://github.com/ocaml/ocaml-lsp
您可以将 coc.nvim 用于 Vim8+ 和 Neovim,并将其配置为使用 ocaml-lsp: https ://github.com/neoclide/coc.nvim/wiki/Language-servers#ocaml-and-reasonml
或者,您可以使用最新的 Neovim nightly (0.5+) 作为 OCaml 语言服务器的客户端,而不是 coc.nvim:https ://github.com/neovim/nvim-lspconfig#ocamllsp
使用 vim-ocaml 改进语法高亮: https ://github.com/ocaml/vim-ocaml
或者 vim-ocaml 嵌入在 vim-polyglot 中,因此您不需要单独安装 vim-ocaml: https ://github.com/sheerun/vim-polyglot
这是一个很好的视频,解释了社区在接下来几年关于工具和 OCaml 平台的总体发展方向: https ://www.youtube.com/watch?v=E8T_4zqWmq8&t
我的 init.vim,也兼容 .vimrc: https ://github.com/nicobao/setup/blob/master/vim/init.vim
伟大的 vimer 的 .vimrc/init.vim: https ://github.com/awesome-streamers/awesome-streamerrc
https://github.com/ocaml/merlin/wiki/vim-from-scratch有一个非常好的指南
由于 Stack Overflow 不欣赏仅链接的答案,因此这里是命令,但实际上 - 访问该页面以获取见解和上下文。
opam install merlin
将此添加到 .vimrc:
let g:opamshare = substitute(system('opam config var share'),'\n$','','''')
execute "set rtp+=" . g:opamshare . "/merlin/vim"
另一个值得一提的替代方案是Onivim ,它是一个基于 Vim 的编辑器,它通过ocaml-lsp
.
它的前端实际上是用 OCaml(好吧,ReasonML)编写的,它在后端使用了 Vim 的一个分支(libvim)。它仍处于 alpha 阶段,还没有提供完整的 Vim 体验,但是我自己已经全职使用了大约一年。
它也是一个商业产品,但可免费用于非商业用途和延时开源。
(完全免责声明:我曾经在 Onivim 上工作,但在撰写本文时我没有)