27

我从未使用过 Vi 或 Vim,但它似乎是编辑 OCaml 文件的最佳选择。不幸的是,我迷失了太多需要关心的事情:ocaml-vi-addon、vi-scripts、otags 等。

我打破了最初对 Vim 使用cream的恐惧,但我怀疑是否需要除 vim-scripts 之外的任何包*。

  • -> 我用的是 Debian,也许这个信息没用
4

7 回答 7

28

OCaml 的默认模式就是它的全部。您可以考虑使用以下插件:

https://github.com/scrooloose/syntastic - 语法检查

https://github.com/def-lkb/merlin - 自动完成

https://github.com/jpalardy/vim-slime - repl 集成

https://github.com/OCamlPro/ocp-indent - 代码格式化

于 2013-03-20T04:59:30.787 回答
15

将这些行放在你的 ~/.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 可以解析编译器的输出并跳转到正确的位置。

于 2013-06-21T11:28:49.173 回答
3

出于以下原因,有人希望得到编辑的支持:

  1. 通过语法高亮/折叠更好地呈现
  2. 更好的自动缩进
  3. 通过后台编译、语法高亮(再次)或任何其他方式更早地发现错误
  4. 内联调试
  5. 内省以列出可用的名称/方法,查看对象类型等。

对于 1 和 2,默认值应该足够好,尽管有这个 ocp-indent 插件试图做得更好。

对于 3,我求助于语法突出显示,并且不知道什么比 vim 更好。

关于内联调试,我从未设法从命令行使用 ocamldebug,因此从未尝试从编辑器中尝试过。

关于内省,我不能推荐足够多的 annot 程序,它可以作为 vim 插件安装,如 README 中所述。

安装后,您只需两次击键即可获得光标下任何内容的类型,这对于能够推断最复杂类型的语言来说非常方便。

于 2013-03-20T08:17:01.397 回答
3

答案已经很老了,我认为这个线程需要更新,因为LSP作为事实上的标准的引入最近彻底改变了旧的文本编辑器(vim、emacs...等)。

LSP(类似 IDE 的功能,如自动完成、重构等)

当前的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

奖励 2:vimrc 和 init.vim

我的 init.vim,也兼容 .vimrc: https ://github.com/nicobao/setup/blob/master/vim/init.vim

伟大的 vimer 的 .vimrc/init.vim: https ://github.com/awesome-streamers/awesome-streamerrc

于 2020-10-17T13:03:15.570 回答
1

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"
于 2019-01-31T21:16:07.737 回答
1

另一个值得一提的替代方案是Onivim ,它是一个基于 Vim 的编辑器,它通过ocaml-lsp.

它的前端实际上是用 OCaml(好吧,ReasonML)编写的,它在后端使用了 Vim 的一个分支(libvim)。它仍处于 alpha 阶段,还没有提供完整的 Vim 体验,但是我自己已经全职使用了大约一年。

它也是一个商业产品,但可免费用于非商业用途和延时开源

(完全免责声明:我曾经在 Onivim 上工作,但在撰写本文时我没有)

于 2020-10-17T13:43:03.500 回答
0

Omlet 曾经是 Vim 的一个很好的模式:作者页面vim.org。如果自 2005 年以来没有新版本,它可能会满足您的需求。如果您尝试一下,请告诉我们您的想法!

于 2013-03-20T08:30:19.240 回答